diff --git a/DEPS b/DEPS index 0065999..d01928e6 100644 --- a/DEPS +++ b/DEPS
@@ -181,11 +181,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': '511124e5a896914d4b3085f9dc52890e2932bd43', + 'skia_revision': '403c807971892049532870707729f0bc3e79e93a', # 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': '0fba36f90087ef91a063f9511557e05fb02343d2', + 'v8_revision': '07c5cd8f1d0654eb3e87b48f3f241919ada0d7ca', # 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. @@ -193,7 +193,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '90bf5bece617b038e926fb16dfc30585fc9fad2b', + 'angle_revision': 'b84cdffeec6cb4aac16120bbd83917b9cd7b4c89', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -244,7 +244,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': '28c4ea91f668f7b2aa04658e9cbebb834dcf3b01', + 'catapult_revision': '9506caf2ea1f11687121fab0d7ad8a6e2a8abc75', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -252,7 +252,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '58a8e025554becc5f1e027307bccb7e8678e32e0', + 'devtools_frontend_revision': '53a21700cf151578c6ff553b2df681b1c8f06ef7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -312,7 +312,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '96f79f6db56b87150be2a12755fed10f91f574dc', + 'dawn_revision': '9b2712456fe635ae460bd3bc4fbf29b78772e2e0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -879,7 +879,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '9230b0169cb173c7432c905f8b95e692e07dbb14', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'de57a32a0bc0305098ab8ca6c28f2b3c51f4e041', 'condition': 'checkout_linux', }, @@ -963,7 +963,7 @@ }, 'src/third_party/glslang/src': - Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + 'e5dbc3114cb98b1592d9faa697efe5eb290c12a4', + Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '51813670627c976a93f4cfbea6fa89fdb4d35cad', 'src/third_party/google_toolbox_for_mac/src': { 'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'), @@ -1297,7 +1297,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '752dcc2bcda2f8f5f5110a48369a1cc7ab70fd3b', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'cce82035ba5bf724db4a143b6a46624239a66ff5', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1498,7 +1498,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '88d715c9115a5ce65c0bf660209dfeee9131ccd0', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '0b3a6e383e17c80e5f3adce826cce7bc202a01cf', + Var('webrtc_git') + '/src.git' + '@' + 'bd5874accf0faef28439ad32c1414bda8c9c25dc', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1568,7 +1568,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@65f043777aedc0a95254978c869bb3ce5c4602e6', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3624da9ce38bf1716d3a7e89087bda9d1c82f498', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/tools/PRESUBMIT.py b/android_webview/tools/PRESUBMIT.py index edc0f95..6a31f718 100644 --- a/android_webview/tools/PRESUBMIT.py +++ b/android_webview/tools/PRESUBMIT.py
@@ -17,8 +17,16 @@ """Presubmit checks run on both upload and commit. """ checks = [] + + src_root = input_api.os_path.join(input_api.PresubmitLocalPath(), '..', '..') checks.extend(input_api.canned_checks.GetPylint( - input_api, output_api, pylintrc='pylintrc')) + input_api, output_api, pylintrc='pylintrc', + # Allows pylint to find //build/android and //third_party/catapult/devil, + # which some of the scripts in this directory import. + extra_paths_list=[ + input_api.os_path.join(src_root, 'build', 'android'), + input_api.os_path.join(src_root, 'third_party', 'catapult', 'devil'), + ])) checks.extend(_GetPythonUnitTests(input_api, output_api)) return input_api.RunTests(checks, False)
diff --git a/android_webview/tools/run_cts.py b/android_webview/tools/run_cts.py index 1fc8def3..41731e5 100755 --- a/android_webview/tools/run_cts.py +++ b/android_webview/tools/run_cts.py
@@ -7,6 +7,7 @@ """Runs the CTS test APKs stored in CIPD.""" import argparse +import contextlib import json import logging import os @@ -18,13 +19,15 @@ sys.path.append(os.path.join( os.path.dirname(__file__), os.pardir, os.pardir, 'build', 'android')) -import devil_chromium # pylint: disable=import-error, unused-import -from devil.android.ndk import abis # pylint: disable=import-error -from devil.android.sdk import version_codes # pylint: disable=import-error -from devil.android.tools import script_common # pylint: disable=import-error -from devil.utils import cmd_helper # pylint: disable=import-error -from devil.utils import logging_common # pylint: disable=import-error -from pylib.utils import test_filter # pylint: disable=import-error +import devil_chromium # pylint: disable=unused-import +from devil.android import device_utils +from devil.android.ndk import abis +from devil.android.sdk import version_codes +from devil.android.tools import script_common +from devil.utils import cmd_helper +from devil.utils import logging_common +from pylib.local.emulator import avd +from pylib.utils import test_filter # cts test archives for all platforms are stored in this bucket # contents need to be updated if there is an important fix to any of @@ -316,6 +319,30 @@ return forwarded_args +@contextlib.contextmanager +def GetDevice(args): + try: + emulator_instance = None + if args.avd_config: + avd_config = avd.AvdConfig(args.avd_config) + avd_config.Install() + emulator_instance = avd_config.CreateInstance() + # Start the emulator w/ -writable-system s.t. we can remount the system + # partition r/w and install our own webview provider. + emulator_instance.Start(writable_system=True) + device_utils.DeviceUtils(emulator_instance.serial).WaitUntilFullyBooted() + + devices = script_common.GetDevices(args.devices, args.blacklist_file) + device = devices[0] + if len(devices) > 1: + logging.warning('Detection of arch and cts-release will use 1st of %d ' + 'devices: %s', len(devices), device.serial) + yield device + finally: + if emulator_instance: + emulator_instance.Stop() + + def main(): parser = argparse.ArgumentParser() parser.add_argument( @@ -360,6 +387,13 @@ dest='module_apk', help='CTS module apk name in ' + _WEBVIEW_CTS_GCS_PATH_FILE + ' file, without the path prefix.') + parser.add_argument( + '--avd-config', + type=os.path.realpath, + help='Path to the avd config textpb. ' + '(See //tools/android/avd/proto for message definition' + ' and existing textpb files.)') + test_filter.AddFilterOptions(parser) script_common.AddDeviceArguments(parser) @@ -371,35 +405,31 @@ test_runner_args.extend(ForwardArgsToTestRunner(args)) - devices = script_common.GetDevices(args.devices, args.blacklist_file) - device = devices[0] - if len(devices) > 1: - logging.warning('Detection of arch and cts-release will use 1st of %d ' - 'devices: %s', len(devices), device.serial) - arch = args.arch or DetermineArch(device) - cts_release = args.cts_release or DetermineCtsRelease(device) + with GetDevice(args) as device: + arch = args.arch or DetermineArch(device) + cts_release = args.cts_release or DetermineCtsRelease(device) - if (args.test_filter_file or args.test_filter - or args.isolated_script_test_filter): - # TODO(aluo): auto-determine the module based on the test filter and the - # available tests in each module - if not args.module_apk: - args.module_apk = 'CtsWebkitTestCases.apk' + if (args.test_filter_file or args.test_filter + or args.isolated_script_test_filter): + # TODO(aluo): auto-determine the module based on the test filter and the + # available tests in each module + if not args.module_apk: + args.module_apk = 'CtsWebkitTestCases.apk' - platform_modules = GetCTSModuleNames(arch, cts_release) - if args.module_apk and args.module_apk not in platform_modules: - raise Exception('--module-apk for arch==' + arch + 'and cts_release==' - + cts_release + ' must be one of: ' - + ', '.join(platform_modules)) + platform_modules = GetCTSModuleNames(arch, cts_release) + if args.module_apk and args.module_apk not in platform_modules: + raise Exception('--module-apk for arch==' + arch + 'and cts_release==' + + cts_release + ' must be one of: ' + + ', '.join(platform_modules)) - # Need to uninstall all previous cts webkit packages so that the - # MockContentProvider names won't conflict with a previously installed - # one under a different package name. This is due to CtsWebkitTestCases's - # package name change from M to N versions of the tests while keeping the - # MockContentProvider's authority string the same. - UninstallAnyCtsWebkitPackages(device) + # Need to uninstall all previous cts webkit packages so that the + # MockContentProvider names won't conflict with a previously installed + # one under a different package name. This is due to CtsWebkitTestCases's + # package name change from M to N versions of the tests while keeping the + # MockContentProvider's authority string the same. + UninstallAnyCtsWebkitPackages(device) - return RunAllCTSTests(args, arch, cts_release, test_runner_args) + return RunAllCTSTests(args, arch, cts_release, test_runner_args) if __name__ == '__main__':
diff --git a/ash/system/unified/unified_system_tray_view.cc b/ash/system/unified/unified_system_tray_view.cc index 7e457e3..747e291 100644 --- a/ash/system/unified/unified_system_tray_view.cc +++ b/ash/system/unified/unified_system_tray_view.cc
@@ -8,6 +8,8 @@ #include "ash/public/cpp/ash_features.h" #include "ash/session/session_controller_impl.h" +#include "ash/shelf/shelf.h" +#include "ash/shelf/shelf_widget.h" #include "ash/shell.h" #include "ash/style/ash_color_provider.h" #include "ash/style/default_color_constants.h" @@ -229,9 +231,15 @@ // static SkColor UnifiedSystemTrayView::GetBackgroundColor() { if (features::IsBackgroundBlurEnabled()) { - return AshColorProvider::Get()->DeprecatedGetBaseLayerColor( - AshColorProvider::BaseLayerType::kTransparent74, - kUnifiedMenuBackgroundColorWithBlur); + AshColorProvider::BaseLayerType layer_type = + Shelf::ForWindow(Shell::GetPrimaryRootWindow()) + ->shelf_widget() + ->GetBackgroundType() == ShelfBackgroundType::kHomeLauncher + ? AshColorProvider::BaseLayerType::kTransparent60 + : AshColorProvider::BaseLayerType::kTransparent74; + + return AshColorProvider::Get()->GetBaseLayerColor( + layer_type, AshColorProvider::AshColorMode::kDark); } return AshColorProvider::Get()->DeprecatedGetBaseLayerColor( AshColorProvider::BaseLayerType::kTransparent90,
diff --git a/base/message_loop/message_pump_libevent_unittest.cc b/base/message_loop/message_pump_libevent_unittest.cc index 067d335..f5dbd4006 100644 --- a/base/message_loop/message_pump_libevent_unittest.cc +++ b/base/message_loop/message_pump_libevent_unittest.cc
@@ -47,6 +47,11 @@ } void TearDown() override { + // Some tests watch |pipefds_| from the |io_thread_|. The |io_thread_| must + // thus be joined to ensure those watches are complete before closing the + // pipe. + io_thread_.Stop(); + if (IGNORE_EINTR(close(pipefds_[0])) < 0) PLOG(ERROR) << "close"; if (IGNORE_EINTR(close(pipefds_[1])) < 0)
diff --git a/base/trace_event/trace_event_etw_export_win.cc b/base/trace_event/trace_event_etw_export_win.cc index de924ce..bf7d6f10 100644 --- a/base/trace_event/trace_event_etw_export_win.cc +++ b/base/trace_event/trace_event_etw_export_win.cc
@@ -92,6 +92,7 @@ "latency", // 0x8000 "blink.user_timing", // 0x10000 "media", // 0x20000 + "loading", // 0x40000 }; const char kOtherEventsGroupName[] = "__OTHER_EVENTS"; // 0x2000000000000000 const char kDisabledOtherEventsGroupName[] =
diff --git a/build/android/gyp/apkbuilder.py b/build/android/gyp/apkbuilder.py index ba796cd..c460db7 100755 --- a/build/android/gyp/apkbuilder.py +++ b/build/android/gyp/apkbuilder.py
@@ -351,12 +351,20 @@ # 3. Dex files logging.debug('Adding classes.dex') if options.dex_file: - with zipfile.ZipFile(options.dex_file, 'r') as dex_zip: - for dex in (d for d in dex_zip.namelist() if d.endswith('.dex')): + with open(options.dex_file) as dex_file_obj: + if options.dex_file.endswith('.dex'): + # This is the case for incremental_install=true. add_to_zip( - apk_dex_dir + dex, - dex_zip.read(dex), + apk_dex_dir + 'classes.dex', + dex_file_obj.read(), compress=not options.uncompress_dex) + else: + with zipfile.ZipFile(dex_file_obj) as dex_zip: + for dex in (d for d in dex_zip.namelist() if d.endswith('.dex')): + add_to_zip( + apk_dex_dir + dex, + dex_zip.read(dex), + compress=not options.uncompress_dex) # 4. Native libraries. logging.debug('Adding lib/')
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py index 634ab7220..904f909 100644 --- a/build/android/pylib/gtest/gtest_test_instance.py +++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -79,8 +79,14 @@ # TODO(jbudorick): Remove these once we're no longer parsing stdout to generate # results. _RE_TEST_STATUS = re.compile( - r'\[ +((?:RUN)|(?:FAILED)|(?:OK)|(?:CRASHED)) +\]' - r' ?([^ ]+)?(?: \((\d+) ms\))?$') + # Test state. + r'\[ +((?:RUN)|(?:FAILED)|(?:OK)|(?:CRASHED)) +\] ?' + # Test name. + r'([^ ]+)?' + # Optional test parameter. + r'(?:, where GetParam\(\) = [^()]*)?' + # Optional test execution time. + r'(?: \((\d+) ms\))?$') # Crash detection constants. _RE_TEST_ERROR = re.compile(r'FAILURES!!! Tests run: \d+,' r' Failures: \d+, Errors: 1')
diff --git a/build/android/pylib/gtest/gtest_test_instance_test.py b/build/android/pylib/gtest/gtest_test_instance_test.py index b39da527..b39ac153a 100755 --- a/build/android/pylib/gtest/gtest_test_instance_test.py +++ b/build/android/pylib/gtest/gtest_test_instance_test.py
@@ -177,6 +177,18 @@ self.assertEquals(1, actual[0].GetDuration()) self.assertEquals(base_test_result.ResultType.PASS, actual[0].GetType()) + def testParseGTestOutput_parameterized(self): + raw_output = [ + '[ RUN ] Baz/FooTest.Bar/0', + '[ FAILED ] Baz/FooTest.Bar/0,' + + ' where GetParam() = 4-byte object <00-00 00-00> (1 ms)', + ] + actual = gtest_test_instance.ParseGTestOutput(raw_output, None, None) + self.assertEquals(1, len(actual)) + self.assertEquals('Baz/FooTest.Bar/0', actual[0].GetName()) + self.assertEquals(1, actual[0].GetDuration()) + self.assertEquals(base_test_result.ResultType.FAIL, actual[0].GetType()) + def testParseGTestXML_none(self): actual = gtest_test_instance.ParseGTestXML(None) self.assertEquals([], actual)
diff --git a/build/android/pylib/local/emulator/avd.py b/build/android/pylib/local/emulator/avd.py index 3a7d580..a701d2d 100644 --- a/build/android/pylib/local/emulator/avd.py +++ b/build/android/pylib/local/emulator/avd.py
@@ -440,7 +440,11 @@ def __str__(self): return '%s|%s' % (self._avd_name, (self._emulator_serial or id(self))) - def Start(self, read_only=True, snapshot_save=False, window=False): + def Start(self, + read_only=True, + snapshot_save=False, + window=False, + writable_system=False): """Starts the emulator running an instance of the given AVD.""" with tempfile_ext.TemporaryFileName() as socket_path, (contextlib.closing( @@ -469,6 +473,9 @@ emulator_cmd.append('-read-only') if not snapshot_save: emulator_cmd.append('-no-snapshot-save') + if writable_system: + emulator_cmd.append('-writable-system') + emulator_env = {} if self._emulator_home: emulator_env['ANDROID_EMULATOR_HOME'] = self._emulator_home
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 31fa3f5..04a8891 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8891849889272099440 \ No newline at end of file +8891823804487142272 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index fd9468f0..db53a042 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -8891914193383482512 \ No newline at end of file +8891823802666694096 \ No newline at end of file
diff --git a/cc/paint/paint_op_buffer.cc b/cc/paint/paint_op_buffer.cc index 20afc9b..97a18290 100644 --- a/cc/paint/paint_op_buffer.cc +++ b/cc/paint/paint_op_buffer.cc
@@ -16,6 +16,7 @@ #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkRegion.h" #include "third_party/skia/include/core/SkSerialProcs.h" +#include "third_party/skia/include/docs/SkPDFDocument.h" #include "third_party/skia/include/gpu/GrContext.h" namespace cc { @@ -1395,9 +1396,11 @@ const PaintFlags* flags, SkCanvas* canvas, const PlaybackParams& params) { + SkPDF::SetNodeId(canvas, op->node_id); flags->DrawToSk(canvas, [op](SkCanvas* c, const SkPaint& p) { c->drawTextBlob(op->blob.get(), op->x, op->y, p); }); + SkPDF::SetNodeId(canvas, 0); } void RestoreOp::Raster(const RestoreOp* op,
diff --git a/cc/paint/skia_paint_canvas.cc b/cc/paint/skia_paint_canvas.cc index f143d9e..e71b9a7 100644 --- a/cc/paint/skia_paint_canvas.cc +++ b/cc/paint/skia_paint_canvas.cc
@@ -9,6 +9,7 @@ #include "cc/paint/paint_recorder.h" #include "cc/paint/scoped_raster_flags.h" #include "third_party/skia/include/core/SkAnnotation.h" +#include "third_party/skia/include/docs/SkPDFDocument.h" namespace cc { SkiaPaintCanvas::ContextFlushes::ContextFlushes() @@ -317,7 +318,9 @@ SkScalar y, NodeId node_id, const PaintFlags& flags) { + SkPDF::SetNodeId(canvas_, node_id); drawTextBlob(blob, x, y, flags); + SkPDF::SetNodeId(canvas_, 0); } void SkiaPaintCanvas::drawPicture(sk_sp<const PaintRecord> record) {
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 5185a5e..63c1740 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -2944,7 +2944,10 @@ "//base/test:test_support_java", "//chrome/android:chrome_java", "//chrome/test/android:chrome_java_test_support", + "//content/public/test/android:android_test_message_pump_support_java", + "//content/public/test/android:content_java_test_support", "//third_party/blink/public:blink_headers_java", + "//third_party/blink/public/mojom:android_mojo_bindings_java", "//third_party/jsr-305:jsr_305_javalib", "//third_party/junit", "//third_party/mockito:mockito_java", @@ -2953,6 +2956,7 @@ ] sources = [ "native_java_unittests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java", + "native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java", ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] @@ -2964,5 +2968,6 @@ testonly = true sources = [ "native_java_unittests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java", + "native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java", ] }
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index 0d96c02..6971faf 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -876,6 +876,7 @@ "java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderFactory.java", "java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java", "java/src/org/chromium/chrome/browser/installedapp/PackageHash.java", + "java/src/org/chromium/chrome/browser/installedapp/PackageManagerDelegate.java", "java/src/org/chromium/chrome/browser/instantapps/AuthenticatedProxyActivity.java", "java/src/org/chromium/chrome/browser/instantapps/InstantAppsBannerData.java", "java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java", @@ -1543,7 +1544,6 @@ "java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java", "java/src/org/chromium/chrome/browser/sms/SmsReceiverInfoBar.java", "java/src/org/chromium/chrome/browser/sms/SmsReceiverUma.java", - "java/src/org/chromium/chrome/browser/snackbar/BottomContainer.java", "java/src/org/chromium/chrome/browser/snackbar/smartlockautosignin/AutoSigninSnackbarController.java", "java/src/org/chromium/chrome/browser/snackbar/undo/UndoBarController.java", "java/src/org/chromium/chrome/browser/ssl/CaptivePortalHelper.java", @@ -1756,6 +1756,7 @@ "java/src/org/chromium/chrome/browser/tracing/TracingNotificationService.java", "java/src/org/chromium/chrome/browser/translate/TranslateBridge.java", "java/src/org/chromium/chrome/browser/translate/TranslateUtils.java", + "java/src/org/chromium/chrome/browser/ui/BottomContainer.java", "java/src/org/chromium/chrome/browser/ui/BottomSheetManager.java", "java/src/org/chromium/chrome/browser/ui/ImmersiveModeManager.java", "java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni index 9d8e39ae..09e03c2a 100644 --- a/chrome/android/chrome_junit_test_java_sources.gni +++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -93,7 +93,6 @@ "junit/src/org/chromium/chrome/browser/incognito/IncognitoTabSnapshotControllerTest.java", "junit/src/org/chromium/chrome/browser/infobar/IPHInfoBarSupportTest.java", "junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java", - "junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java", "junit/src/org/chromium/chrome/browser/installedapp/PackageHashTest.java", "junit/src/org/chromium/chrome/browser/invalidation/ResumableDelayedTaskRunnerTest.java", "junit/src/org/chromium/chrome/browser/invalidation/SessionsInvalidationManagerTest.java",
diff --git a/chrome/android/java/res/layout/main.xml b/chrome/android/java/res/layout/main.xml index f1600c9c..e63974f 100644 --- a/chrome/android/java/res/layout/main.xml +++ b/chrome/android/java/res/layout/main.xml
@@ -21,7 +21,7 @@ android:layout_height="match_parent" android:visibility="gone" /> - <org.chromium.chrome.browser.snackbar.BottomContainer + <org.chromium.chrome.browser.ui.BottomContainer android:id="@+id/bottom_container" android:layout_width="match_parent" android:layout_height="wrap_content"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index d76c07ec..4583c6e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -123,7 +123,6 @@ import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.share.ShareDelegateImpl; -import org.chromium.chrome.browser.snackbar.BottomContainer; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.SyncController; import org.chromium.chrome.browser.tab.Tab; @@ -142,6 +141,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.chrome.browser.translate.TranslateBridge; +import org.chromium.chrome.browser.ui.BottomContainer; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker; import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/ClientManager.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/ClientManager.java index 9d445fb6..4595feb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/ClientManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/ClientManager.java
@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.browserservices.OriginVerifier.OriginVerificationListener; import org.chromium.chrome.browser.browserservices.PostMessageHandler; import org.chromium.chrome.browser.installedapp.InstalledAppProviderImpl; +import org.chromium.chrome.browser.installedapp.PackageManagerDelegate; import org.chromium.chrome.browser.util.UrlUtilities; import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.WebContents; @@ -483,8 +484,8 @@ () -> { params.originVerifier.start(listener, origin); }); if (relation == CustomTabsService.RELATION_HANDLE_ALL_URLS && InstalledAppProviderImpl.isAppInstalledAndAssociatedWithOrigin( - params.getPackageName(), URI.create(origin.toString()), - ContextUtils.getApplicationContext().getPackageManager())) { + params.getPackageName(), URI.create(origin.toString()), + new PackageManagerDelegate())) { params.mLinkedOrigins.add(origin); } return true;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java index af10ad4e2..0da9b6a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
@@ -365,7 +365,7 @@ } } - if (tab == null && mBrowserVisibilityDelegate.get() == BrowserControlsState.SHOWN) { + if (tab == null && mBrowserVisibilityDelegate.get() != BrowserControlsState.HIDDEN) { setPositionsForTabToNonFullscreen(); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderFactory.java index b2861f6..777b617d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderFactory.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.installedapp; -import org.chromium.base.ContextUtils; import org.chromium.chrome.browser.instantapps.InstantAppsHandler; import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.installedapp.mojom.InstalledAppProvider; @@ -49,7 +48,7 @@ @Override public InstalledAppProvider createImpl() { - return new InstalledAppProviderImpl(mFrameUrlDelegate, ContextUtils.getApplicationContext(), - InstantAppsHandler.getInstance()); + return new InstalledAppProviderImpl( + mFrameUrlDelegate, new PackageManagerDelegate(), InstantAppsHandler.getInstance()); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java index 8dd9b6f4..fefa637 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.installedapp; -import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -58,7 +57,7 @@ private static final String TAG = "InstalledAppProvider"; private final FrameUrlDelegate mFrameUrlDelegate; - private final Context mContext; + private final PackageManagerDelegate mPackageManagerDelegate; private final InstantAppsHandler mInstantAppsHandler; /** @@ -78,11 +77,11 @@ public boolean isIncognito(); } - public InstalledAppProviderImpl(FrameUrlDelegate frameUrlDelegate, Context context, - InstantAppsHandler instantAppsHandler) { + public InstalledAppProviderImpl(FrameUrlDelegate frameUrlDelegate, + PackageManagerDelegate packageManagerDelegate, InstantAppsHandler instantAppsHandler) { assert instantAppsHandler != null; mFrameUrlDelegate = frameUrlDelegate; - mContext = context; + mPackageManagerDelegate = packageManagerDelegate; mInstantAppsHandler = instantAppsHandler; } @@ -136,7 +135,6 @@ ArrayList<RelatedApplication> installedApps = new ArrayList<RelatedApplication>(); int delayMillis = 0; - PackageManager pm = mContext.getPackageManager(); for (int i = 0; i < Math.min(relatedApps.length, MAX_ALLOWED_RELATED_APPS); i++) { RelatedApplication app = relatedApps[i]; // If the package is of type "play", it is installed, and the origin is associated with @@ -156,7 +154,8 @@ } delayMillis += calculateDelayForPackageMs(app.id); - if (isAppInstalledAndAssociatedWithOrigin(app.id, frameUrl, pm)) { + if (isAppInstalledAndAssociatedWithOrigin( + app.id, frameUrl, mPackageManagerDelegate)) { installedApps.add(app); } } @@ -185,7 +184,7 @@ private void setVersionInfo(RelatedApplication installedApp) { assert installedApp.id != null; try { - PackageInfo info = mContext.getPackageManager().getPackageInfo(installedApp.id, 0); + PackageInfo info = mPackageManagerDelegate.getPackageInfo(installedApp.id, 0); installedApp.version = info.versionName; } catch (NameNotFoundException e) { } @@ -224,7 +223,7 @@ * origin of this URL. Can be null. */ public static boolean isAppInstalledAndAssociatedWithOrigin( - String packageName, URI frameUrl, PackageManager pm) { + String packageName, URI frameUrl, PackageManagerDelegate pm) { // TODO(yusufo): Move this to a better/shared location before crbug.com/749876 is closed. ThreadUtils.assertOnBackgroundThread(); @@ -273,7 +272,7 @@ * @return The list of asset statements, parsed from JSON. * @throws NameNotFoundException if the application is not installed. */ - private static JSONArray getAssetStatements(String packageName, PackageManager pm) + private static JSONArray getAssetStatements(String packageName, PackageManagerDelegate pm) throws NameNotFoundException { // Get the <meta-data> from this app's manifest. // Throws NameNotFoundException if the application is not installed.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/installedapp/PackageManagerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/PackageManagerDelegate.java new file mode 100644 index 0000000..84c6d471 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/PackageManagerDelegate.java
@@ -0,0 +1,44 @@ +// 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. + +package org.chromium.chrome.browser.installedapp; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; + +import org.chromium.base.ContextUtils; + +/** + * A wrapper around the PackageManager that may be overridden for testing. + */ +public class PackageManagerDelegate { + /** + * See {@link PackageManager#getApplicationInfo(String, int)} + */ + public ApplicationInfo getApplicationInfo(String packageName, int flags) + throws NameNotFoundException { + return ContextUtils.getApplicationContext().getPackageManager().getApplicationInfo( + packageName, flags); + } + + /** + * See {@link PackageManager#getResourcesForApplication(ApplicationInfo)} + */ + public Resources getResourcesForApplication(ApplicationInfo appInfo) + throws NameNotFoundException { + return ContextUtils.getApplicationContext().getPackageManager().getResourcesForApplication( + appInfo); + } + + /** + * See {@link PackageManager#getPackageInfo(String, int)} + */ + public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException { + return ContextUtils.getApplicationContext().getPackageManager().getPackageInfo( + packageName, flags); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java index 69174b07..cacc397 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java
@@ -27,46 +27,6 @@ * Reads, writes, and migrates preferences related to network usage and privacy. */ public class PrivacyPreferencesManager implements CrashReportingPermissionManager{ - // "crash_dump_upload", "crash_dump_upload_no_cellular" - Deprecated prefs used for - // 3-option setting for usage and crash reporting. Last used in M55, removed in M78. - - // "cellular_experiment" - Deprecated pref corresponding to the finch experiment - // controlling migration from 3-option setting to ON/OFF toggle for usage and crash - // reporting. Last used in M55, removed in M78. - - private static final String DEPRECATED_PREF_PHYSICAL_WEB = "physical_web"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_SHARING = "physical_web_sharing"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_HAS_DEFERRED_METRICS_KEY = - "PhysicalWeb.HasDeferredMetrics"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_OPT_IN_DECLINE_BUTTON_PRESS_COUNT = - "PhysicalWeb.OptIn.DeclineButtonPressed"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_OPT_IN_ENABLE_BUTTON_PRESS_COUNT = - "PhysicalWeb.OptIn.EnableButtonPressed"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PREFS_FEATURE_DISABLED_COUNT = - "PhysicalWeb.Prefs.FeatureDisabled"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PREFS_FEATURE_ENABLED_COUNT = - "PhysicalWeb.Prefs.FeatureEnabled"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PREFS_LOCATION_DENIED_COUNT = - "PhysicalWeb.Prefs.LocationDenied"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PREFS_LOCATION_GRANTED_COUNT = - "PhysicalWeb.Prefs.LocationGranted"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PWS_BACKGROUND_RESOLVE_TIMES = - "PhysicalWeb.ResolveTime.Background"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PWS_FOREGROUND_RESOLVE_TIMES = - "PhysicalWeb.ResolveTime.Foreground"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PWS_REFRESH_RESOLVE_TIMES = - "PhysicalWeb.ResolveTime.Refresh"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_URL_SELECTED_COUNT = - "PhysicalWeb.UrlSelected"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_TOTAL_URLS_INITIAL_COUNTS = - "PhysicalWeb.TotalUrls.OnInitialDisplay"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_TOTAL_URLS_REFRESH_COUNTS = - "PhysicalWeb.TotalUrls.OnRefresh"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_ACTIVITY_REFERRALS = - "PhysicalWeb.ActivityReferral"; - private static final String DEPRECATED_PREF_PHYSICAL_WEB_PHYSICAL_WEB_STATE = - "PhysicalWeb.State"; - public static final String PREF_METRICS_REPORTING = "metrics_reporting"; private static final String PREF_METRICS_IN_SAMPLE = "in_metrics_sample"; private static final String PREF_NETWORK_PREDICTIONS = "network_predictions"; @@ -84,8 +44,6 @@ PrivacyPreferencesManager(Context context) { mContext = context; mSharedPreferences = ContextUtils.getAppSharedPreferences(); - - migratePhysicalWebPreferences(); } public static PrivacyPreferencesManager getInstance() { @@ -95,29 +53,6 @@ return sInstance; } - // TODO(https://crbug.com/826540): Remove some time after 5/2019. - public void migratePhysicalWebPreferences() { - SharedPreferences.Editor editor = mSharedPreferences.edit(); - editor.remove(DEPRECATED_PREF_PHYSICAL_WEB) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_SHARING) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_HAS_DEFERRED_METRICS_KEY) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_OPT_IN_DECLINE_BUTTON_PRESS_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_OPT_IN_ENABLE_BUTTON_PRESS_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PREFS_FEATURE_DISABLED_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PREFS_FEATURE_ENABLED_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PREFS_LOCATION_DENIED_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PREFS_LOCATION_GRANTED_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PWS_BACKGROUND_RESOLVE_TIMES) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PWS_FOREGROUND_RESOLVE_TIMES) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PWS_REFRESH_RESOLVE_TIMES) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_URL_SELECTED_COUNT) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_TOTAL_URLS_INITIAL_COUNTS) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_TOTAL_URLS_REFRESH_COUNTS) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_ACTIVITY_REFERRALS) - .remove(DEPRECATED_PREF_PHYSICAL_WEB_PHYSICAL_WEB_STATE) - .apply(); - } - /** * Migrate and delete old preferences. Note that migration has to happen in Android-specific * code because we need to access ALLOW_PRERENDER sharedPreference.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java index e15fb77..133ad364 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
@@ -22,7 +22,6 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.task.PostTask; import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; -import org.chromium.components.signin.AccountIdProvider; import org.chromium.components.signin.AccountTrackerService; import org.chromium.components.signin.ChromeSigninController; import org.chromium.components.signin.base.CoreAccountInfo; @@ -411,11 +410,8 @@ private void progressSignInFlowSeedSystemAccounts() { if (mAccountTrackerService.checkAndSeedSystemAccounts()) { progressSignInFlowCheckPolicy(); - } else if (AccountIdProvider.getInstance().canBeUsed()) { - mSignInState.mBlockedOnAccountSeeding = true; } else { - Log.w(TAG, "Cancelling the sign-in process as Google Play services is unavailable"); - abortSignIn(); + mSignInState.mBlockedOnAccountSeeding = true; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java index f85e364..ffd03cc9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
@@ -36,27 +36,19 @@ StartSurfaceToolbarMediator(PropertyModel model) { mPropertyModel = model; mPropertyModel.set(MENU_IS_VISIBLE, !FeatureUtilities.isBottomToolbarEnabled()); - - // Observers - - mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { - @Override - public void onTabModelSelected(TabModel newModel, TabModel oldModel) { - mPropertyModel.set(IS_INCOGNITO, mTabModelSelector.isIncognitoSelected()); - } - }; } void onNativeLibraryReady() { - if (mTemplateUrlObserver != null) { - mTemplateUrlObserver = new TemplateUrlServiceObserver() { - @Override - public void onTemplateURLServiceChanged() { - mPropertyModel.set(LOGO_IS_VISIBLE, - TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()); - } - }; - } + assert mTemplateUrlObserver == null; + + mTemplateUrlObserver = new TemplateUrlServiceObserver() { + @Override + public void onTemplateURLServiceChanged() { + mPropertyModel.set(LOGO_IS_VISIBLE, + TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()); + } + }; + TemplateUrlServiceFactory.get().addObserver(mTemplateUrlObserver); mPropertyModel.set( LOGO_IS_VISIBLE, TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()); @@ -82,7 +74,7 @@ void setTabModelSelector(TabModelSelector selector) { mTabModelSelector = selector; - if (mTabModelSelector != null) { + if (mTabModelSelectorObserver == null) { mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { @Override public void onTabModelSelected(TabModel newModel, TabModel oldModel) { @@ -90,6 +82,7 @@ } }; } + mPropertyModel.set(IS_INCOGNITO, mTabModelSelector.isIncognitoSelected()); mTabModelSelector.addObserver(mTabModelSelectorObserver); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/BottomContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java similarity index 96% rename from chrome/android/java/src/org/chromium/chrome/browser/snackbar/BottomContainer.java rename to chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java index 09f9ec36..2e8ca85f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/BottomContainer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java
@@ -2,7 +2,7 @@ // 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.snackbar; +package org.chromium.chrome.browser.ui; import android.content.Context; import android.util.AttributeSet; @@ -81,5 +81,5 @@ public void onContentOffsetChanged(int offset) {} @Override - public void onToggleOverlayVideoMode(boolean enabled) { } + public void onToggleOverlayVideoMode(boolean enabled) {} }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java index a180f896..e61d770 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -10,7 +10,6 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Rect; -import android.support.v4.view.ViewCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -275,9 +274,6 @@ (TouchRestrictingFrameLayout) findViewById(R.id.bottom_sheet_content); mBottomSheetContentContainer.setBottomSheet(this); mBottomSheetContentContainer.setBackgroundResource(R.drawable.top_round); - // TODO(b/146412594): Replace the color with default_bg_color once available. - ViewCompat.setBackgroundTintList(mBottomSheetContentContainer, - getResources().getColorStateList(R.color.default_bg_color_elev_3)); mContainerWidth = root.getWidth(); mContainerHeight = root.getHeight();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java similarity index 84% rename from chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java rename to chrome/android/native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java index d61626c..87c5231 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java +++ b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java
@@ -4,40 +4,36 @@ package org.chromium.chrome.browser.installedapp; -import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Bundle; +import android.os.Looper; import android.util.Pair; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.Shadows; -import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowPackageManager; -import org.chromium.base.ThreadUtils; -import org.chromium.base.task.test.CustomShadowAsyncTask; -import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.annotations.CalledByNative; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.TimeoutTimer; import org.chromium.chrome.browser.instantapps.InstantAppsHandler; +import org.chromium.content_public.browser.test.NestedSystemMessageHandler; +import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.installedapp.mojom.InstalledAppProvider; import org.chromium.installedapp.mojom.RelatedApplication; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicBoolean; /** Ensure that the InstalledAppProvider returns the correct apps. */ -@RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE, shadows = {CustomShadowAsyncTask.class}) public class InstalledAppProviderTest { private static final String ASSET_STATEMENTS_KEY = InstalledAppProviderImpl.ASSET_STATEMENTS_KEY; @@ -67,16 +63,51 @@ private static final String ORIGIN_DIFFERENT_HOST = "https://example.org:8000"; private static final String ORIGIN_DIFFERENT_PORT = "https://example.com:8001"; + private FakePackageManager mFakePackageManager; private FakeFrameUrlDelegate mFrameUrlDelegate; private InstalledAppProviderTestImpl mInstalledAppProvider; private FakeInstantAppsHandler mFakeInstantAppsHandler; + private static class FakePackageManager extends PackageManagerDelegate { + private Map<String, PackageInfo> mPackageInfo = new HashMap<>(); + private Map<String, Resources> mResources = new HashMap<>(); + + public void addPackageInfo(PackageInfo packageInfo) { + mPackageInfo.put(packageInfo.packageName, packageInfo); + } + + public void addResources(String packageName, Resources resources) { + mResources.put(packageName, resources); + } + + @Override + public ApplicationInfo getApplicationInfo(String packageName, int flags) + throws NameNotFoundException { + return getPackageInfo(packageName, flags).applicationInfo; + } + + @Override + public Resources getResourcesForApplication(ApplicationInfo appInfo) + throws NameNotFoundException { + if (!mResources.containsKey(appInfo.packageName)) throw new NameNotFoundException(); + return mResources.get(appInfo.packageName); + } + + @Override + public PackageInfo getPackageInfo(String packageName, int flags) + throws NameNotFoundException { + if (!mPackageInfo.containsKey(packageName)) throw new NameNotFoundException(); + return mPackageInfo.get(packageName); + } + } + private static class InstalledAppProviderTestImpl extends InstalledAppProviderImpl { private long mLastDelayMillis; - public InstalledAppProviderTestImpl(FrameUrlDelegate frameUrlDelegate, Context context, + public InstalledAppProviderTestImpl(FrameUrlDelegate frameUrlDelegate, + PackageManagerDelegate packageManagerDelegate, FakeInstantAppsHandler instantAppsHandler) { - super(frameUrlDelegate, context, instantAppsHandler); + super(frameUrlDelegate, packageManagerDelegate, instantAppsHandler); } public long getLastDelayMillis() { @@ -136,10 +167,8 @@ packageInfo.applicationInfo.packageName = packageName; packageInfo.applicationInfo.metaData = metaData; - ShadowPackageManager packageManager = - Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager()); - packageManager.addPackage(packageInfo); - ShadowPackageManager.resources.put(packageInfo.packageName, resources); + mFakePackageManager.addPackageInfo(packageInfo); + mFakePackageManager.addResources(packageName, resources); } /** @@ -150,15 +179,24 @@ * for these tests). */ private static class FakeResources extends Resources { + private static AssetManager sAssetManager = createAssetManager(); private final int mId; private final String mValue; + private static AssetManager createAssetManager() { + try { + return (AssetManager) AssetManager.class.getConstructor().newInstance(); + } catch (Exception e) { + return null; + } + } + // Do not warn about deprecated call to Resources(); the documentation says code is not // supposed to create its own Resources object, but we are using it to fake out the // Resources, and there is no other way to do that. @SuppressWarnings("deprecation") public FakeResources(int identifier, String value) { - super(new AssetManager(), null, null); + super(sAssetManager, null, null); mId = identifier; mValue = value; } @@ -276,7 +314,8 @@ * returned. */ private void verifyInstalledApps(RelatedApplication[] manifestRelatedApps, - RelatedApplication[] expectedInstalledRelatedApps) { + RelatedApplication[] expectedInstalledRelatedApps) throws Exception { + final AtomicBoolean called = new AtomicBoolean(false); mInstalledAppProvider.filterInstalledApps( manifestRelatedApps, new InstalledAppProvider.FilterInstalledAppsResponse() { @Override @@ -288,30 +327,42 @@ Assert.assertEquals( expectedInstalledRelatedApps[i], installedRelatedApps[i]); } + called.set(true); } }); + pollUiThread(() -> called.get()); } - @Before + private static void pollUiThread(final Callable<Boolean> criteria) throws Exception { + boolean isSatisfied = criteria.call(); + TimeoutTimer timer = new TimeoutTimer(CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL); + while (!isSatisfied && !timer.isTimedOut()) { + NestedSystemMessageHandler.runSingleNestedLooperTask(Looper.myQueue()); + isSatisfied = criteria.call(); + } + Assert.assertTrue(isSatisfied); + } + + @CalledByNative + public static InstalledAppProviderTest create() { + return new InstalledAppProviderTest(); + } + + private InstalledAppProviderTest() {} + + @CalledByNative public void setUp() { - // Avoid triggering asserts in InstalledAppProviderImpl that check they are being run off - // the UI thread (since this is a single-threaded test). - ThreadUtils.setThreadAssertsDisabledForTesting(true); + mFakePackageManager = new FakePackageManager(); mFrameUrlDelegate = new FakeFrameUrlDelegate(URL_ON_ORIGIN); mFakeInstantAppsHandler = new FakeInstantAppsHandler(); mInstalledAppProvider = new InstalledAppProviderTestImpl( - mFrameUrlDelegate, RuntimeEnvironment.application, mFakeInstantAppsHandler); - } - - @After - public void tearDown() { - ThreadUtils.setThreadAssertsDisabledForTesting(false); + mFrameUrlDelegate, mFakePackageManager, mFakeInstantAppsHandler); } /** Origin of the page using the API is missing certain parts of the URI. */ - @Test @Feature({"InstalledApp"}) - public void testOriginMissingParts() { + @CalledByNative + public void testOriginMissingParts() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; setAssetStatement(PACKAGE_NAME_1, NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN); @@ -325,9 +376,9 @@ } /** Incognito mode with one related Android app. */ - @Test @Feature({"InstalledApp"}) - public void testIncognitoWithOneInstalledRelatedApp() { + @CalledByNative + public void testIncognitoWithOneInstalledRelatedApp() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; setAssetStatement(PACKAGE_NAME_1, NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN); @@ -342,9 +393,9 @@ * * <p>An Android app relates to the web app, but not mutual. */ - @Test @Feature({"InstalledApp"}) - public void testNoRelatedApps() { + @CalledByNative + public void testNoRelatedApps() throws Exception { // The web manifest has no related apps. RelatedApplication manifestRelatedApps[] = new RelatedApplication[] {}; @@ -361,9 +412,9 @@ * * <p>An Android app relates to the web app, but not mutual. */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppNoId() { + @CalledByNative + public void testOneRelatedAppNoId() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] {createRelatedApplication(PLATFORM_ANDROID, null, null)}; @@ -379,9 +430,9 @@ * <p>An Android app with the same id relates to the web app. This should be ignored since the * manifest doesn't mention the Android app. */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedNonAndroidApp() { + @CalledByNative + public void testOneRelatedNonAndroidApp() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_OTHER, PACKAGE_NAME_1, null)}; @@ -396,9 +447,9 @@ * * <p>Another Android app relates to the web app, but not mutual. */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppNotInstalled() { + @CalledByNative + public void testOneRelatedAppNotInstalled() throws Exception { // The web manifest has a related Android app named |PACKAGE_NAME_1|. RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -411,11 +462,12 @@ verifyInstalledApps(manifestRelatedApps, expectedInstalledRelatedApps); } - /** Android app manifest has an asset_statements key, but the resource it links to is missing. + /** + * Android app manifest has an asset_statements key, but the resource it links to is missing. */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppBrokenAssetStatementsResource() { + @CalledByNative + public void testOneRelatedAppBrokenAssetStatementsResource() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -429,9 +481,9 @@ } /** One related Android app; Android app is not mutually related (has no asset_statements). */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppNoAssetStatements() { + @CalledByNative + public void testOneRelatedAppNoAssetStatements() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -441,9 +493,9 @@ } /** One related Android app; Android app is not mutually related (has no asset_statements). */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppNoAssetStatementsNullMetadata() { + @CalledByNative + public void testOneRelatedAppNoAssetStatementsNullMetadata() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -460,9 +512,9 @@ * The Android app is related to a web app with a different host. - The Android app is related * to a web app with a different port. */ - @Test @Feature({"InstalledApp"}) - public void testOneRelatedAppRelatedToDifferentOrigins() { + @CalledByNative + public void testOneRelatedAppRelatedToDifferentOrigins() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -481,9 +533,9 @@ } /** One related Android app; Android app is installed and mutually related. */ - @Test @Feature({"InstalledApp"}) - public void testOneInstalledRelatedApp() { + @CalledByNative + public void testOneInstalledRelatedApp() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -498,9 +550,9 @@ * * <p>This simulates navigating the frame while keeping the same Mojo service open. */ - @Test @Feature({"InstalledApp"}) - public void testDynamicallyChangingUrl() { + @CalledByNative + public void testDynamicallyChangingUrl() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -526,9 +578,9 @@ } /** One related Android app (installed and mutually related), with a non-null URL field. */ - @Test @Feature({"InstalledApp"}) - public void testInstalledRelatedAppWithUrl() { + @CalledByNative + public void testInstalledRelatedAppWithUrl() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, URL_UNRELATED)}; @@ -539,9 +591,9 @@ } /** One related Android app; Android app is related to multiple origins. */ - @Test @Feature({"InstalledApp"}) - public void testMultipleAssetStatements() { + @CalledByNative + public void testMultipleAssetStatements() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -549,7 +601,7 @@ // app. String statements = "[" + createAssetStatement( - NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN_DIFFERENT_HOST) + NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN_DIFFERENT_HOST) + ", " + createAssetStatement(NAMESPACE_WEB, RELATION_HANDLE_ALL_URLS, ORIGIN) + "]"; setStringResource(PACKAGE_NAME_1, ASSET_STATEMENTS_KEY, statements); @@ -559,9 +611,9 @@ } /** A JSON syntax error in the Android app's asset statement. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementSyntaxError() { + @CalledByNative + public void testAssetStatementSyntaxError() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -573,9 +625,9 @@ } /** The Android app's asset statement is not an array. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNotArray() { + @CalledByNative + public void testAssetStatementNotArray() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -587,9 +639,9 @@ } /** The Android app's asset statement array contains non-objects. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementArrayNoObjects() { + @CalledByNative + public void testAssetStatementArrayNoObjects() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -608,9 +660,9 @@ * <p>Currently, the relation string (in the Android package's asset statement) is ignored, so * the app is still returned as "installed". */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNoRelation() { + @CalledByNative + public void testAssetStatementNoRelation() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -630,9 +682,9 @@ * <p>Currently, the relation string (in the Android package's asset statement) is ignored, so * any will do. Is this desirable, or do we want to require a specific relation string? */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNonStandardRelation() { + @CalledByNative + public void testAssetStatementNonStandardRelation() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -645,9 +697,9 @@ } /** Android app has no "target" in the asset statement. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNoTarget() { + @CalledByNative + public void testAssetStatementNoTarget() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -659,9 +711,9 @@ } /** Android app has no "namespace" in the asset statement. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNoNamespace() { + @CalledByNative + public void testAssetStatementNoNamespace() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -675,9 +727,9 @@ } /** Android app is related, but not to the web namespace. */ - @Test @Feature({"InstalledApp"}) - public void testNonWebAssetStatement() { + @CalledByNative + public void testNonWebAssetStatement() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -688,9 +740,9 @@ } /** Android app has no "site" in the asset statement. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementNoSite() { + @CalledByNative + public void testAssetStatementNoSite() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -704,9 +756,9 @@ } /** Android app has a syntax error in the "site" field of the asset statement. */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementSiteSyntaxError() { + @CalledByNative + public void testAssetStatementSiteSyntaxError() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -718,9 +770,9 @@ } /** Android app has a "site" field missing certain parts of the URI (scheme, host, port). */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementSiteMissingParts() { + @CalledByNative + public void testAssetStatementSiteMissingParts() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -744,9 +796,9 @@ * <p>The path part shouldn't really be there (according to the Digital Asset Links spec), but * if it is, we are lenient and just ignore it (matching only the origin). */ - @Test @Feature({"InstalledApp"}) - public void testAssetStatementSiteHasPath() { + @CalledByNative + public void testAssetStatementSiteHasPath() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -762,9 +814,9 @@ * * <p>Another Android app relates to the web app, but not mutual. */ - @Test @Feature({"InstalledApp"}) - public void testExtraInstalledApp() { + @CalledByNative + public void testExtraInstalledApp() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null)}; @@ -781,9 +833,9 @@ * <p>Web app also related to an app with the same name on another platform, and another Android * app which is not installed. */ - @Test @Feature({"InstalledApp"}) - public void testMultipleInstalledRelatedApps() { + @CalledByNative + public void testMultipleInstalledRelatedApps() throws Exception { RelatedApplication[] manifestRelatedApps = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null), createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_2, null), @@ -798,9 +850,9 @@ } /** Tests the pseudo-random artificial delay to counter a timing attack. */ - @Test @Feature({"InstalledApp"}) - public void testArtificialDelay() { + @CalledByNative + public void testArtificialDelay() throws Exception { byte[] salt = {0x64, 0x09, -0x68, -0x25, 0x70, 0x11, 0x25, 0x24, 0x68, -0x1a, 0x08, 0x79, -0x12, -0x50, 0x3b, -0x57, -0x17, -0x4d, 0x46, 0x02}; PackageHash.setGlobalSaltForTesting(salt); @@ -825,9 +877,9 @@ Assert.assertEquals(5, mInstalledAppProvider.getLastDelayMillis()); } - @Test @Feature({"InstalledApp"}) - public void testMultipleAppsIncludingInstantApps() { + @CalledByNative + public void testMultipleAppsIncludingInstantApps() throws Exception { RelatedApplication[] manifestRelatedApps = new RelatedApplication[] { createRelatedApplication(PLATFORM_ANDROID, PACKAGE_NAME_1, null), // Instant Apps: @@ -848,9 +900,9 @@ * Multiple related uninstalled apps (over the allowed limit) followed by one related Android * app which is installed and mutually related. */ - @Test @Feature({"InstalledApp"}) - public void testRelatedAppsOverAllowedThreshold() { + @CalledByNative + public void testRelatedAppsOverAllowedThreshold() throws Exception { RelatedApplication manifestRelatedApps[] = new RelatedApplication[MAX_ALLOWED_RELATED_APPS + 1]; for (int i = 0; i < MAX_ALLOWED_RELATED_APPS; i++) {
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index c3742d3e..7c17f8d1 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1148,33 +1148,6 @@ "performance_manager/observers/isolation_context_metrics.h", "performance_manager/observers/metrics_collector.cc", "performance_manager/observers/metrics_collector.h", - "performance_manager/persistence/site_data/exponential_moving_average.cc", - "performance_manager/persistence/site_data/exponential_moving_average.h", - "performance_manager/persistence/site_data/feature_usage.h", - "performance_manager/persistence/site_data/leveldb_site_data_store.cc", - "performance_manager/persistence/site_data/leveldb_site_data_store.h", - "performance_manager/persistence/site_data/non_recording_site_data_cache.cc", - "performance_manager/persistence/site_data/non_recording_site_data_cache.h", - "performance_manager/persistence/site_data/noop_site_data_writer.cc", - "performance_manager/persistence/site_data/noop_site_data_writer.h", - "performance_manager/persistence/site_data/site_data_cache.h", - "performance_manager/persistence/site_data/site_data_cache_facade.cc", - "performance_manager/persistence/site_data/site_data_cache_facade.h", - "performance_manager/persistence/site_data/site_data_cache_facade_factory.cc", - "performance_manager/persistence/site_data/site_data_cache_facade_factory.h", - "performance_manager/persistence/site_data/site_data_cache_factory.cc", - "performance_manager/persistence/site_data/site_data_cache_factory.h", - "performance_manager/persistence/site_data/site_data_cache_impl.cc", - "performance_manager/persistence/site_data/site_data_cache_impl.h", - "performance_manager/persistence/site_data/site_data_cache_inspector.h", - "performance_manager/persistence/site_data/site_data_impl.cc", - "performance_manager/persistence/site_data/site_data_impl.h", - "performance_manager/persistence/site_data/site_data_reader.cc", - "performance_manager/persistence/site_data/site_data_reader.h", - "performance_manager/persistence/site_data/site_data_store.h", - "performance_manager/persistence/site_data/site_data_writer.cc", - "performance_manager/persistence/site_data/site_data_writer.h", - "performance_manager/persistence/site_data/tab_visibility.h", "performance_monitor/metric_evaluator_helper_win.cc", "performance_monitor/metric_evaluator_helper_win.h", "performance_monitor/process_metrics_history.cc", @@ -3330,6 +3303,33 @@ "obsolete_system/obsolete_system_win.cc", "page_load_metrics/observers/session_restore_page_load_metrics_observer.cc", "page_load_metrics/observers/session_restore_page_load_metrics_observer.h", + "performance_manager/persistence/site_data/exponential_moving_average.cc", + "performance_manager/persistence/site_data/exponential_moving_average.h", + "performance_manager/persistence/site_data/feature_usage.h", + "performance_manager/persistence/site_data/leveldb_site_data_store.cc", + "performance_manager/persistence/site_data/leveldb_site_data_store.h", + "performance_manager/persistence/site_data/non_recording_site_data_cache.cc", + "performance_manager/persistence/site_data/non_recording_site_data_cache.h", + "performance_manager/persistence/site_data/noop_site_data_writer.cc", + "performance_manager/persistence/site_data/noop_site_data_writer.h", + "performance_manager/persistence/site_data/site_data_cache.h", + "performance_manager/persistence/site_data/site_data_cache_facade.cc", + "performance_manager/persistence/site_data/site_data_cache_facade.h", + "performance_manager/persistence/site_data/site_data_cache_facade_factory.cc", + "performance_manager/persistence/site_data/site_data_cache_facade_factory.h", + "performance_manager/persistence/site_data/site_data_cache_factory.cc", + "performance_manager/persistence/site_data/site_data_cache_factory.h", + "performance_manager/persistence/site_data/site_data_cache_impl.cc", + "performance_manager/persistence/site_data/site_data_cache_impl.h", + "performance_manager/persistence/site_data/site_data_cache_inspector.h", + "performance_manager/persistence/site_data/site_data_impl.cc", + "performance_manager/persistence/site_data/site_data_impl.h", + "performance_manager/persistence/site_data/site_data_reader.cc", + "performance_manager/persistence/site_data/site_data_reader.h", + "performance_manager/persistence/site_data/site_data_store.h", + "performance_manager/persistence/site_data/site_data_writer.cc", + "performance_manager/persistence/site_data/site_data_writer.h", + "performance_manager/persistence/site_data/tab_visibility.h", "permissions/attestation_permission_request.cc", "permissions/attestation_permission_request.h", "policy/local_sync_policy_handler.cc",
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index eb9a7f5..faca0e9 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -3574,7 +3574,6 @@ case service_manager::SandboxType::kNetwork: case service_manager::SandboxType::kCdm: case service_manager::SandboxType::kPdfCompositor: - case service_manager::SandboxType::kProfiling: case service_manager::SandboxType::kAudio: // Should never reach here. CHECK(0);
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index fd69f52..efa9948 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -534,6 +534,8 @@ "arc/file_system_watcher/arc_file_system_watcher_service.h", "arc/file_system_watcher/arc_file_system_watcher_util.cc", "arc/file_system_watcher/arc_file_system_watcher_util.h", + "arc/file_system_watcher/file_system_scanner.cc", + "arc/file_system_watcher/file_system_scanner.h", "arc/fileapi/arc_content_file_system_async_file_util.cc", "arc/fileapi/arc_content_file_system_async_file_util.h", "arc/fileapi/arc_content_file_system_backend_delegate.cc", @@ -2603,6 +2605,7 @@ "arc/extensions/arc_support_message_host_unittest.cc", "arc/file_system_watcher/arc_file_system_watcher_service_unittest.cc", "arc/file_system_watcher/arc_file_system_watcher_util_unittest.cc", + "arc/file_system_watcher/file_system_scanner_unittest.cc", "arc/fileapi/arc_content_file_system_async_file_util_unittest.cc", "arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc", "arc/fileapi/arc_content_file_system_file_stream_writer_unittest.cc",
diff --git a/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc index c933349b..c32f692 100644 --- a/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc +++ b/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc
@@ -159,7 +159,8 @@ case policy::DM_STATUS_SERVICE_ARC_DISABLED: case policy::DM_STATUS_SERVICE_POLICY_NOT_FOUND: { // POLICY_NOT_FOUND is the first error encountered when the domain is not - // set up yet in CPanel, so just treat it the same as ARC_DISABLED. + // set up yet in the Admin console, so just treat it the same as + // ARC_DISABLED. fetch_status = Status::ARC_DISABLED; break; }
diff --git a/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.cc b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.cc new file mode 100644 index 0000000..9c05ffa --- /dev/null +++ b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.cc
@@ -0,0 +1,298 @@ +// 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 "chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.h" + +#include <fts.h> +#include <sys/stat.h> + +#include "base/files/file_enumerator.h" +#include "base/sequenced_task_runner.h" +#include "base/task/post_task.h" +#include "chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_util.h" +#include "components/arc/mojom/file_system.mojom.h" +#include "components/arc/session/arc_bridge_service.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" + +using content::BrowserThread; + +namespace arc { + +namespace { + +struct FTSCloser { + void operator()(FTS* fts) { + if (fts) + fts_close(fts); + } +}; + +// The scan interval for FileSystemScanner instances. +// This value needs to be bigger than 1 second since we subtract 1 second +// inside IsModified function to handle the timekeeper issue. In order to get +// more information about the issue, please check the comments above IsModified +// function. +// +// TODO(crbug/1037824): Measure the battery usage to find an optimal value for +// this. +constexpr base::TimeDelta kRegularScanInterval = + base::TimeDelta::FromSeconds(5); + +// This value is used to handle the delay caused by timekeeper when reading the +// ctime values. For more information, please read the comments inside +// IsModified function. +// +// This value MUST NOT exceed |kRegularScanInterval|. +constexpr base::TimeDelta kCtimeCorrection = base::TimeDelta::FromSeconds(1); + +// Returns ctime for the file |path| using stat(2). +// If stat fails for some reason, e.g., the file does not exists, then it +// returns base::Time(). +base::Time GetLastChangedTime(const base::FilePath& path) { + struct stat st = {}; + const int res = stat(path.value().c_str(), &st); + if (res < 0) { + DPLOG(ERROR) << "Couldn't stat " << path.value(); + return base::Time(); + } + return base::Time::FromTimeSpec(st.st_ctim); +} + +// Returns true if ctime of |path| is after |previous_scan_time|. +bool IsModified(const base::FilePath& path, + base::Time previous_scan_time, + FileSystemScanner::GetLastChangeTimeCallback ctime_callback) { + // It is possible that ctime of the file might be before |previous_scan_time| + // even if the file has been modified after |previous_scan_time|. + // + // The reason for this is the concept of timekeeping in linux kernel. When + // writing to a file, ctime is updated using the value from the timekeeper + // which is updated by interrupts. However, when we use base::Time::Now() to + // update |previous_scan_time|, that call reads the system clock time directly + // instead of reading it from the timekeeper. Therefore, if the file is + // modified just after |previous_scan_time| is updated, it is possible + // that ctime is updated before an interrupt has been triggered. + // + // Thus, we add |kCtimeCorrection| to the ctime before the comparison to + // ensure we do not miss any modifications. + // + // Since |previous_scan_time| is updated at the beginning of a scan, it might + // be possible for a file to be identified as modified twice if it is modified + // after the |previous_scan_time| is stored but before the file is checked by + // the scan. It is expected and preferred compared to miss a file + // modification, e.g., if we store |previous_scan_time| at the end of a scan. + base::Time ctime = ctime_callback.Run(path) + kCtimeCorrection; + return previous_scan_time <= ctime; +} + +// The following functions are made non-member functions because they can be +// executed on any thread other than the UI thread, and the FileSystemScanner is +// created on UI thread. +// +// It is not possible to PostTask an object's member function to a thread +// other than the one where the object is allocated, using weak pointers. + +// Returns Android paths of all media files (recursively) under |directory|. +std::vector<std::string> FullScan(const base::FilePath& directory, + base::Time previous_scan_time, + const base::FilePath& cros_dir, + const base::FilePath& android_dir) { + std::vector<std::string> media_files; + base::FileEnumerator file_enum(directory, true /* recursive */, + base::FileEnumerator::FILES); + for (auto path = file_enum.Next(); !path.empty(); path = file_enum.Next()) { + if (!HasAndroidSupportedMediaExtension(path)) + continue; + media_files.push_back(GetAndroidPath(path, cros_dir, android_dir).value()); + } + return media_files; +} + +// Iterates over the files in |cros_dir| and calls respective mojo functions +// for modified files and directories. +RegularScanResult RegularScan( + base::Time previous_scan_time, + const base::FilePath& cros_dir, + const base::FilePath& android_dir, + FileSystemScanner::GetLastChangeTimeCallback ctime_callback) { + char* argv[] = {const_cast<char*>(cros_dir.value().c_str()), nullptr}; + std::unique_ptr<FTS, FTSCloser> fts{ + fts_open(argv, FTS_PHYSICAL | FTS_NOCHDIR | FTS_XDEV, nullptr)}; + if (!fts) { + LOG(ERROR) << "Regular scan failed because the path cannot be opened."; + return {}; + } + + RegularScanResult result; + // Keeps track of the last modified directory to force RequestMediaScan for + // all media files under a modified directory. + base::FilePath topmost_modified_dir; + + // FileEnumerator does not guarantee the traversal ordering. Thus, fts_read is + // preferred here since it provides the preorder traversal which is important + // to cache |topmost_modified_dir|. + FTSENT* p; + while ((p = fts_read(fts.get())) != nullptr) { + // There is no fts* MSAN interceptor yet in the codebase, so this + // manual MSAN_UNPOISON needs to be done to avoid false MSAN test runs + // failures. + MSAN_UNPOISON(p, sizeof(FTSENT)); + MSAN_UNPOISON(p->fts_path, p->fts_pathlen + 1); + base::FilePath path(p->fts_path); + if (p->fts_info == FTS_D) { + if (!IsModified(path, previous_scan_time, ctime_callback)) + continue; + if (!topmost_modified_dir.IsParent(path)) + topmost_modified_dir = path; + // Since the directory is modified, push it into the buffer to search for + // removed files and remove their entries from MediaStore. + result.modified_directories.push_back( + GetAndroidPath(path, cros_dir, android_dir).value()); + } else if (p->fts_info == FTS_F && + HasAndroidSupportedMediaExtension(path)) { + if (IsModified(path, previous_scan_time, ctime_callback) || + topmost_modified_dir.IsParent(path)) { + // If it is modified or its under a directory which is modified, push it + // into the buffer to trigger media scan later. + result.modified_files.push_back( + GetAndroidPath(path, cros_dir, android_dir).value()); + } + } + } + return result; +} + +} // namespace + +RegularScanResult::RegularScanResult() = default; +RegularScanResult::~RegularScanResult() = default; +RegularScanResult::RegularScanResult(RegularScanResult&&) = default; +RegularScanResult& RegularScanResult::operator=(RegularScanResult&&) = default; + +FileSystemScanner::FileSystemScanner(const base::FilePath& cros_dir, + const base::FilePath& android_dir, + ArcBridgeService* arc_bridge_service) + : FileSystemScanner(cros_dir, + android_dir, + arc_bridge_service, + base::BindRepeating(&GetLastChangedTime)) {} + +FileSystemScanner::FileSystemScanner(const base::FilePath& cros_dir, + const base::FilePath& android_dir, + ArcBridgeService* arc_bridge_service, + GetLastChangeTimeCallback ctime_callback) + : state_(State::kIdle), + cros_dir_(cros_dir), + android_dir_(android_dir), + arc_bridge_service_(arc_bridge_service), + scan_runner_( + base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(), + base::TaskPriority::BEST_EFFORT})), + ctime_callback_(ctime_callback) {} + +FileSystemScanner::~FileSystemScanner() = default; + +void FileSystemScanner::Start() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + ScheduleFullScan(); +} + +// TODO(risan): Consider to rename this to "Post". +void FileSystemScanner::ScheduleFullScan() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + // Stop the timer to prevent scheduling regular scans before the full scan + // finishes. + timer_.Stop(); + // Invalidate WeakPtrs to cancel callbacks to prevent the scanner being idle. + weak_ptr_factory_.InvalidateWeakPtrs(); + state_ = State::kWaitingForScanToFinish; + // TODO(risan): We could skip a bunch of FullScan queued in the sequence if + // several SystemTimeClock change happened later (in separate CL). To do the + // skip, we could have a boolean variable full_scan_requested, and PostTask + // full_scan_requested from the OnFullScanFinished. + base::PostTaskAndReplyWithResult( + scan_runner_.get(), FROM_HERE, + base::BindOnce(&FullScan, cros_dir_, previous_scan_time_, cros_dir_, + android_dir_), + base::BindOnce(&FileSystemScanner::OnFullScanFinished, + weak_ptr_factory_.GetWeakPtr(), base::Time::Now())); + ReindexDirectory(android_dir_.value()); +} + +void FileSystemScanner::OnFullScanFinished( + base::Time current_scan_time, + std::vector<std::string> media_files) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_EQ(state_, State::kWaitingForScanToFinish); + if (!media_files.empty()) + RequestMediaScan(media_files); + previous_scan_time_ = current_scan_time; + state_ = State::kIdle; + timer_.Start(FROM_HERE, kRegularScanInterval, this, + &FileSystemScanner::ScheduleRegularScan); +} + +void FileSystemScanner::ScheduleRegularScan() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + // Do not schedule another scan if there is an ongoing scan happening. + if (state_ != State::kIdle) + return; + state_ = State::kWaitingForScanToFinish; + base::PostTaskAndReplyWithResult( + scan_runner_.get(), FROM_HERE, + base::BindOnce(&RegularScan, previous_scan_time_, cros_dir_, android_dir_, + ctime_callback_), + base::BindOnce(&FileSystemScanner::OnRegularScanFinished, + weak_ptr_factory_.GetWeakPtr(), base::Time::Now())); +} + +void FileSystemScanner::OnRegularScanFinished(base::Time current_scan_time, + RegularScanResult result) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_NE(state_, State::kIdle); + if (!result.modified_files.empty()) + RequestMediaScan(result.modified_files); + if (!result.modified_directories.empty()) + RequestFileRemovalScan(result.modified_directories); + previous_scan_time_ = current_scan_time; + state_ = State::kIdle; +} + +void FileSystemScanner::ReindexDirectory(const std::string& directory) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + auto* instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->file_system(), ReindexDirectory); + if (!instance) { + LOG(WARNING) << "Failed to call ReindexDirectory."; + return; + } + instance->ReindexDirectory(directory); +} + +void FileSystemScanner::RequestFileRemovalScan( + const std::vector<std::string>& directories) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + auto* instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->file_system(), RequestFileRemovalScan); + if (!instance) { + LOG(WARNING) << "Failed to call RequestFileRemovalScan."; + return; + } + instance->RequestFileRemovalScan(directories); +} + +void FileSystemScanner::RequestMediaScan( + const std::vector<std::string>& files) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + auto* instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->file_system(), RequestMediaScan); + if (!instance) { + LOG(WARNING) << "Failed to call RequestMediaScan."; + return; + } + instance->RequestMediaScan(files); +} + +} // namespace arc \ No newline at end of file
diff --git a/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.h b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.h new file mode 100644 index 0000000..1e3b44f --- /dev/null +++ b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.h
@@ -0,0 +1,162 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_ARC_FILE_SYSTEM_WATCHER_FILE_SYSTEM_SCANNER_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_FILE_SYSTEM_WATCHER_FILE_SYSTEM_SCANNER_H_ + +#include <string> +#include <vector> + +#include "base/callback.h" +#include "base/files/file_path.h" +#include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" +#include "base/time/time.h" +#include "base/timer/timer.h" + +namespace arc { + +class ArcBridgeService; + +struct RegularScanResult { + RegularScanResult(); + ~RegularScanResult(); + RegularScanResult(RegularScanResult&&); + RegularScanResult& operator=(RegularScanResult&&); + + std::vector<std::string> modified_files; + std::vector<std::string> modified_directories; +}; + +// Periodical scanner to detect file system modifications in a directory. It is +// activated when FileSystemWatcher throws an error, e.g., the file system is +// too large. +// TODO(risan): Address all remaining feedbacks from next iterations of +// https://chromium-review.googlesource.com/c/chromium/src/+/1946177 before +// enabling this. +class FileSystemScanner { + public: + using GetLastChangeTimeCallback = + base::RepeatingCallback<base::Time(const base::FilePath& path)>; + + // |cros_dir| is the directory that will be scanned by the scanner. + // |android_dir| is the respective path of |cros_dir| which is mounted to the + // Android container. + FileSystemScanner(const base::FilePath& cros_dir, + const base::FilePath& android_dir, + ArcBridgeService* arc_bridge_service); + + // This constructor is only testing. + FileSystemScanner(const base::FilePath& cros_dir, + const base::FilePath& android_dir, + ArcBridgeService* arc_bridge_service, + GetLastChangeTimeCallback ctime_callback); + + FileSystemScanner(const FileSystemScanner&) = delete; + FileSystemScanner& operator=(const FileSystemScanner&) = delete; + + ~FileSystemScanner(); + + // Starts scanning the directory. + void Start(); + + private: + // Schedules a full scan that triggers RequestMediaScan for all files and + // triggers ReindexDirectory for |android_dir_|. The reason for reindexing is + // to ensure that there are no indexes for non-existing files in MediaStore. + void ScheduleFullScan(); + + // Called after a full scan is finished. It updates |previous_scan_time_| + // accordingly. It also updates the state, so that a regular scan can be + // scheduled. + void OnFullScanFinished(base::Time current_scan_time, + std::vector<std::string> media_files); + + // Schedules a regular scan if there is no ongoing scan at that time. Regular + // scan triggers RequestMediaScan only for the files that are modified after + // the previous (full or regular) scan. It also calls RequestFileRemovalScan + // for the modified directories to detect the removed files and directories + // under them. So that, their entries are removed from MediaStore. + void ScheduleRegularScan(); + + // Called after a regular scan is finished. It updates |previous_scan_time_| + // accordingly. It also updates the state, so that another regular scan can be + // done without skipping unless there is a full scan scheduled. + void OnRegularScanFinished(base::Time current_scan_time, + RegularScanResult result); + + // Wrapper function that calls ReindexDirectory through mojo interface. + void ReindexDirectory(const std::string& directory_path); + + // Wrapper function that calls RequestFileRemovalScan through mojo interface. + void RequestFileRemovalScan(const std::vector<std::string>& directory_paths); + + // Wrapper function that calls RequestMediaScan through mojo interface. + void RequestMediaScan(const std::vector<std::string>& files); + + // Internal state which is used to skip regular scans when there is an ongoing + // regular scan or there is a full scan scheduled and has not finished yet. + enum class State { + // Neither a regular scan nor full scan is happening. A scan can only be + // scheduled in this state. + kIdle, + // There is a scan which is already PostTask'ed but haven't finished yet. + // State will return to |kIdle| in the OnScanFinished function. + kWaitingForScanToFinish, + }; + State state_; + + const base::FilePath cros_dir_; + const base::FilePath android_dir_; + ArcBridgeService* const arc_bridge_service_; + + // The timestamp of the start of the last scan. + base::Time previous_scan_time_; + // The task runner which runs the scans to avoid blocking the UI thread. + scoped_refptr<base::SequencedTaskRunner> scan_runner_; + // Calls ScheduleRegularScan every |kFileSystemScannerInterval|. + base::RepeatingTimer timer_; + GetLastChangeTimeCallback ctime_callback_; + base::WeakPtrFactory<FileSystemScanner> weak_ptr_factory_{this}; + + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, ScheduleFullScan); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanCreateTopLevelFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanCreateTopLevelDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanModifyTopLevelFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanModifyTopLevelDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanRenameTopLevelFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanRenameTopLevelDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanDeleteTopLevelFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanDeleteTopLevelDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanCreateNestedFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanCreateNestedDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanModifyNestedFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanModifyNestedDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanRenameNestedFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanRenameNestedDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanDeleteNestedFile); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanDeleteNestedDirectory); + FRIEND_TEST_ALL_PREFIXES(ArcFileSystemScannerTest, + ScheduleRegularScanNoChange); +}; + +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_FILE_SYSTEM_WATCHER_FILE_SYSTEM_SCANNER_H_
diff --git a/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner_unittest.cc b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner_unittest.cc new file mode 100644 index 0000000..d950263 --- /dev/null +++ b/chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner_unittest.cc
@@ -0,0 +1,477 @@ +// 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 "chrome/browser/chromeos/arc/file_system_watcher/file_system_scanner.h" + +#include <unistd.h> + +#include <string> +#include <vector> + +#include "base/files/file_enumerator.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_util.h" +#include "chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/arc/arc_service_manager.h" +#include "components/arc/session/arc_bridge_service.h" +#include "components/arc/test/connection_holder_util.h" +#include "components/arc/test/fake_file_system_instance.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::_; +using ::testing::AnyNumber; +using ::testing::Return; + +namespace arc { + +namespace { + +constexpr char kTestingProfileName[] = "test-user"; + +class FileUtil { + public: + void SetLastChangeTime(const base::FilePath& path, base::Time ctime) { + ctimes_[path] = ctime; + } + + base::Time GetLastChangeTime(const base::FilePath& path) { + return ctimes_[path]; + } + + private: + std::map<base::FilePath, base::Time> ctimes_; +}; + +} // namespace + +class ArcFileSystemScannerTest : public ::testing::Test { + protected: + void SetUp() override { + android_dir_ = base::FilePath(FakeFileSystemInstance::kFakeAndroidPath); + // TODO(risan): ASSERT_TRUE inside this won't terminate. Instead, this + // should return boolean and we should return from this SetUp() when it is + // false. + CreateDummyFilesAndDirectories(); + + // Setting up profile. + profile_manager_ = std::make_unique<TestingProfileManager>( + TestingBrowserProcess::GetGlobal()); + ASSERT_TRUE(profile_manager_->SetUp()); + Profile* profile = + profile_manager_->CreateTestingProfile(kTestingProfileName); + + // Setting up FakeFileSystemInstance. + auto ctime_callback = base::BindRepeating(&FileUtil::GetLastChangeTime, + base::Unretained(&file_util_)); + file_system_instance_.SetGetLastChangeTimeCallback(ctime_callback); + file_system_instance_.SetCrosDir(temp_dir_.GetPath()); + + // Setting up ArcBridgeService and inject FakeFileSystemInstance. + arc_file_system_bridge_ = + std::make_unique<ArcFileSystemBridge>(profile, &arc_bridge_service_); + arc_bridge_service_.file_system()->SetInstance(&file_system_instance_); + WaitForInstanceReady(arc_bridge_service_.file_system()); + ASSERT_TRUE(file_system_instance_.InitCalled()); + + // Setting up the FileSystemScanner. + file_system_scanner_ = std::make_unique<FileSystemScanner>( + temp_dir_.GetPath(), android_dir_, &arc_bridge_service_, + ctime_callback); + } + + void TearDown() override { + arc_bridge_service_.file_system()->CloseInstance(&file_system_instance_); + arc_file_system_bridge_.reset(); + profile_manager_.reset(); + expected_media_store_.clear(); + } + + void CreateDummyFilesAndDirectories() { + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + base::FilePath dir = temp_dir_.GetPath(); + ASSERT_TRUE(CreateDirectory(dir, base::Time())); + ASSERT_TRUE(CreateFile(dir.AppendASCII("1.png"), base::Time())); + ASSERT_TRUE(CreateDirectory(dir.AppendASCII("a"), base::Time())); + ASSERT_TRUE(CreateFile(dir.AppendASCII("a/2.png"), base::Time())); + ASSERT_TRUE(CreateDirectory(dir.AppendASCII("a/b"), base::Time())); + ASSERT_TRUE(CreateFile(dir.AppendASCII("a/b/3.png"), base::Time())); + } + + // TODO(risan): expected_media_store_ needs to be set by the callers + // instead of here. It should be called by the callers for explicitness. + void ModifyDirectory(const base::FilePath& path, base::Time ctime) { + expected_media_store_[GetAndroidPath(path, temp_dir_.GetPath(), + android_dir_)] = base::Time(); + file_util_.SetLastChangeTime(path, ctime); + } + + void ModifyFile(const base::FilePath& path, base::Time ctime) { + expected_media_store_[GetAndroidPath(path, temp_dir_.GetPath(), + android_dir_)] = ctime; + file_util_.SetLastChangeTime(path, ctime); + } + + bool CreateFile(const base::FilePath& path, base::Time ctime) { + base::FilePath parent = path.DirName(); + ModifyFile(path, ctime); + ModifyDirectory(parent, ctime); + return WriteFile(path, "42", sizeof("42")) == sizeof("42"); + } + + bool CreateDirectory(const base::FilePath& path, base::Time ctime) { + file_util_.SetLastChangeTime(path, ctime); + ModifyDirectory(path.DirName(), ctime); + return base::CreateDirectory(path); + } + + bool RenameFile(const base::FilePath& old_path, + const base::FilePath& new_path, + base::Time ctime) { + DeleteFileRecursively(old_path, ctime); + return CreateFile(new_path, ctime); + } + + bool RenameDirectory(const base::FilePath& old_path, + const base::FilePath& new_path, + base::Time ctime) { + base::FilePath android_old_path = + GetAndroidPath(old_path, temp_dir_.GetPath(), android_dir_); + base::FilePath android_new_path = + GetAndroidPath(new_path, temp_dir_.GetPath(), android_dir_); + + // Collect all files to be renamed recursively under the |old_path|. + std::vector<base::FilePath> to_be_renamed = {android_old_path}; + for (const auto& entry : expected_media_store_) { + if (android_old_path.IsParent(entry.first)) { + to_be_renamed.push_back(entry.first); + } + } + + // Update media store index for all files under |old_path| to be under the + // |new_path|. + for (const auto& to_be_renamed_path : to_be_renamed) { + base::FilePath path = android_new_path; + android_old_path.AppendRelativePath(to_be_renamed_path, &path); + expected_media_store_[path] = expected_media_store_[to_be_renamed_path]; + expected_media_store_.erase(to_be_renamed_path); + } + + // Set the ctime accordingly. + file_util_.SetLastChangeTime(new_path, ctime); + ModifyDirectory(new_path.DirName(), ctime); + return Move(old_path, new_path); + } + + bool DeleteFileRecursively(const base::FilePath& path, base::Time ctime) { + base::FilePath android_path = + GetAndroidPath(path, temp_dir_.GetPath(), android_dir_); + + // Collect all files to be removed recursively under the |path|. + std::vector<base::FilePath> to_be_removed = {android_path}; + for (const auto& entry : expected_media_store_) { + if (android_path.IsParent(entry.first)) { + to_be_removed.push_back(entry.first); + } + } + + // Update media store index to remove the collected files. + for (const auto& to_be_removed_path : to_be_removed) { + expected_media_store_.erase(to_be_removed_path); + } + + // Set the ctime accordingly. + ModifyDirectory(path.DirName(), ctime); + return base::DeleteFileRecursively(path); + } + + std::unique_ptr<TestingProfileManager> profile_manager_; + ArcBridgeService arc_bridge_service_; + base::FilePath android_dir_; + base::ScopedTempDir temp_dir_; + std::unique_ptr<FileSystemScanner> file_system_scanner_; + content::BrowserTaskEnvironment task_environment_; + FakeFileSystemInstance file_system_instance_; + std::unique_ptr<ArcFileSystemBridge> arc_file_system_bridge_; + std::unique_ptr<TestingProfile> profile_; + FileUtil file_util_; + std::map<base::FilePath, base::Time> expected_media_store_; +}; + +TEST_F(ArcFileSystemScannerTest, ScheduleFullScan) { + file_system_scanner_->ScheduleFullScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanCreateTopLevelFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE(CreateFile(dir.AppendASCII("foo.png"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanCreateTopLevelDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level directories. + ASSERT_TRUE(CreateDirectory(dir.AppendASCII("foo"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanModifyTopLevelFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ModifyFile(dir.AppendASCII("1.png"), now); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanModifyTopLevelDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ModifyDirectory(dir.AppendASCII("a"), now); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanRenameTopLevelFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE( + RenameFile(dir.AppendASCII("1.png"), dir.AppendASCII("foo.jpg"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanRenameTopLevelDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE( + RenameDirectory(dir.AppendASCII("a"), dir.AppendASCII("foo"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanDeleteTopLevelFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::FilePath dir = temp_dir_.GetPath(); + base::Time now = base::Time::Now(); + + // Test if the scanner catches when top level files are deleted. + ASSERT_TRUE(DeleteFileRecursively(dir.AppendASCII("1.png"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanDeleteTopLevelDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::FilePath dir = temp_dir_.GetPath(); + base::Time now = base::Time::Now(); + + // Test if the scanner catches when top level files are deleted. + ASSERT_TRUE(DeleteFileRecursively(dir.AppendASCII("a"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanCreateNestedFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE(CreateFile(dir.AppendASCII("a/foo.png"), now)); + ASSERT_TRUE(CreateFile(dir.AppendASCII("a/b/bar.png"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanCreateNestedDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE(CreateDirectory(dir.AppendASCII("a/foo"), now)); + ASSERT_TRUE(CreateDirectory(dir.AppendASCII("a/b/bar"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanRenameNestedFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE(RenameFile(dir.AppendASCII("a/2.png"), + dir.AppendASCII("a/foo.jpg"), now)); + ASSERT_TRUE(RenameFile(dir.AppendASCII("a/b/3.png"), + dir.AppendASCII("a/b/bar.jpg"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanRenameNestedDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ASSERT_TRUE( + RenameDirectory(dir.AppendASCII("a/b"), dir.AppendASCII("a/foo"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanModifyNestedFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ModifyFile(dir.AppendASCII("a/2.png"), now); + ModifyFile(dir.AppendASCII("a/b/3.png"), now); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanModifyNestedDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + base::FilePath dir = temp_dir_.GetPath(); + + // Test if the scanner catches creation of top level files. + ModifyDirectory(dir.AppendASCII("a/b"), now); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanDeleteNestedFile) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::FilePath dir = temp_dir_.GetPath(); + base::Time now = base::Time::Now(); + + // Test if the scanner catches when top level files are deleted. + ASSERT_TRUE(DeleteFileRecursively(dir.AppendASCII("a/2.png"), now)); + ASSERT_TRUE(DeleteFileRecursively(dir.AppendASCII("a/b/3.png"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanDeleteNestedDirectory) { + file_system_instance_.SetMediaStore(expected_media_store_); + // EXPECT_NE(expected_media_store_, file_system_instance_.GetMediaStore()); + base::FilePath dir = temp_dir_.GetPath(); + base::Time now = base::Time::Now(); + + // Test if the scanner catches when top level files are deleted. + ASSERT_TRUE(DeleteFileRecursively(dir.AppendASCII("a/b"), now)); + + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +TEST_F(ArcFileSystemScannerTest, ScheduleRegularScanNoChange) { + file_system_instance_.SetMediaStore(expected_media_store_); + + base::Time now = base::Time::Now(); + + // Test if the scanner works as intended when there are no file system + // events. + file_system_scanner_->previous_scan_time_ = now; + file_system_scanner_->ScheduleRegularScan(); + task_environment_.RunUntilIdle(); + EXPECT_EQ(expected_media_store_, file_system_instance_.GetMediaStore()); +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc index 552f3f9..0f160fb9 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc +++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
@@ -40,7 +40,6 @@ #include "components/arc/arc_prefs.h" #include "components/arc/arc_util.h" #include "components/arc/intent_helper/arc_intent_helper_bridge.h" -#include "components/arc/intent_helper/font_size_util.h" #include "components/arc/mojom/backup_settings.mojom.h" #include "components/arc/mojom/pip.mojom.h" #include "components/arc/session/arc_bridge_service.h" @@ -66,6 +65,8 @@ constexpr char kArcProxyBypassListDelimiter[] = ","; +constexpr float kAndroidFontScaleNormal = 1; + bool GetHttpProxyServer(const ProxyConfigDictionary* proxy_config_dict, std::string* host, int* port) {
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc index c075b34..7f3ce8a 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc
@@ -427,15 +427,7 @@ status_uploader_.reset(new StatusUploader( client(), std::make_unique<DeviceStatusCollector>( - local_state_, chromeos::system::StatisticsProvider::GetInstance(), - DeviceStatusCollector::VolumeInfoFetcher(), - DeviceStatusCollector::CPUStatisticsFetcher(), - DeviceStatusCollector::CPUTempFetcher(), - DeviceStatusCollector::AndroidStatusFetcher(), - DeviceStatusCollector::TpmStatusFetcher(), - DeviceStatusCollector::EMMCLifetimeFetcher(), - DeviceStatusCollector::StatefulPartitionInfoFetcher(), - DeviceStatusCollector::CrosHealthdDataFetcher()), + local_state_, chromeos::system::StatisticsProvider::GetInstance()), task_runner_, kDeviceStatusUploadFrequency)); }
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc index 967d4ab..87c4dee 100644 --- a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc +++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc
@@ -945,6 +945,21 @@ pref_service_, prefs::kDeviceActivityTimes); } +DeviceStatusCollector::DeviceStatusCollector( + PrefService* pref_service, + chromeos::system::StatisticsProvider* provider) + : DeviceStatusCollector( + pref_service, + provider, + DeviceStatusCollector::VolumeInfoFetcher(), + DeviceStatusCollector::CPUStatisticsFetcher(), + DeviceStatusCollector::CPUTempFetcher(), + DeviceStatusCollector::AndroidStatusFetcher(), + DeviceStatusCollector::TpmStatusFetcher(), + DeviceStatusCollector::EMMCLifetimeFetcher(), + DeviceStatusCollector::StatefulPartitionInfoFetcher(), + DeviceStatusCollector::CrosHealthdDataFetcher()) {} + DeviceStatusCollector::~DeviceStatusCollector() { power_manager_->RemoveObserver(this); }
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector.h b/chrome/browser/chromeos/policy/status_collector/device_status_collector.h index 9af5e63..4d4d7c95 100644 --- a/chrome/browser/chromeos/policy/status_collector/device_status_collector.h +++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector.h
@@ -177,6 +177,13 @@ const EMMCLifetimeFetcher& emmc_lifetime_fetcher, const StatefulPartitionInfoFetcher& stateful_partition_info_fetcher, const CrosHealthdDataFetcher& cros_healthd_data_fetcher); + + // Constructor with default callbacks. These callbacks are always executed on + // Blocking Pool. Caller is responsible for passing already initialized + // |pref_service|. + DeviceStatusCollector(PrefService* pref_service, + chromeos::system::StatisticsProvider* provider); + ~DeviceStatusCollector() override; // StatusCollector:
diff --git a/chrome/browser/chromeos/policy/status_uploader_unittest.cc b/chrome/browser/chromeos/policy/status_uploader_unittest.cc index 03ed4c68..574dfd7f 100644 --- a/chrome/browser/chromeos/policy/status_uploader_unittest.cc +++ b/chrome/browser/chromeos/policy/status_uploader_unittest.cc
@@ -56,18 +56,7 @@ class MockDeviceStatusCollector : public policy::DeviceStatusCollector { public: explicit MockDeviceStatusCollector(PrefService* local_state) - : DeviceStatusCollector( - local_state, - nullptr, - policy::DeviceStatusCollector::VolumeInfoFetcher(), - policy::DeviceStatusCollector::CPUStatisticsFetcher(), - policy::DeviceStatusCollector::CPUTempFetcher(), - policy::DeviceStatusCollector::AndroidStatusFetcher(), - policy::DeviceStatusCollector::TpmStatusFetcher(), - policy::DeviceStatusCollector::EMMCLifetimeFetcher(), - policy::DeviceStatusCollector::StatefulPartitionInfoFetcher(), - policy::DeviceStatusCollector::CrosHealthdDataFetcher()) {} - + : DeviceStatusCollector(local_state, nullptr) {} MOCK_METHOD1(GetStatusAsync, void(const policy::StatusCollectorCallback&)); MOCK_METHOD0(OnSubmittedSuccessfully, void());
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index ad115513..36919752 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -3072,6 +3072,55 @@ 1); } +// Regression test for http://crbug.com/996940. Requests that redirected to an +// appcache handled URL could have request ID collisions. +IN_PROC_BROWSER_TEST_F(ExtensionWebRequestApiTest, RedirectToAppCacheRequest) { + embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data"); + ASSERT_TRUE(StartEmbeddedTestServer()); + + GURL main_url = embedded_test_server()->GetURL( + "/appcache/simple_page_with_manifest.html"); + + base::string16 expected_title = base::ASCIIToUTF16("AppCache updated"); + + // Load the main page first to make sure it is cached. After the first + // navigation, load the extension, then navigate again. + EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), main_url)); + content::TitleWatcher title_watcher( + browser()->tab_strip_model()->GetActiveWebContents(), expected_title); + EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); + + TestExtensionDir test_dir; + test_dir.WriteManifest(R"({ + "name": "Web Request Appcache Redirect Test", + "manifest_version": 2, + "version": "0.1", + "background": { "scripts": ["background.js"] }, + "permissions": ["<all_urls>", "webRequest"] + })"); + test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), R"( + window.numErrors = 0; + chrome.webRequest.onErrorOccurred.addListener(function(details) { + window.numErrors++; + }, {urls: ['<all_urls>']}); + + chrome.test.sendMessage('ready'); + )"); + + ExtensionTestMessageListener listener("ready", false); + const Extension* extension = LoadExtension(test_dir.UnpackedPath()); + ASSERT_TRUE(extension); + EXPECT_TRUE(listener.WaitUntilSatisfied()); + + // This navigation should go through appcache. + EXPECT_TRUE(ui_test_utils::NavigateToURL( + browser(), + embedded_test_server()->GetURL("/server-redirect?" + main_url.spec()))); + + EXPECT_EQ( + GetCountFromBackgroundPage(extension, profile(), "window.numErrors"), 0); +} + // Regression test for https://crbug.com/1019614. IN_PROC_BROWSER_TEST_F(ExtensionWebRequestApiTest, HSTSUpgradeAfterRedirect) { net::EmbeddedTestServer https_test_server(
diff --git a/chrome/browser/extensions/forced_extensions/installation_tracker.cc b/chrome/browser/extensions/forced_extensions/installation_tracker.cc index 8ca32cc2..2852478 100644 --- a/chrome/browser/extensions/forced_extensions/installation_tracker.cc +++ b/chrome/browser/extensions/forced_extensions/installation_tracker.cc
@@ -35,7 +35,8 @@ pref_service_(profile->GetPrefs()), start_time_(base::Time::Now()), timer_(std::move(timer)) { - observer_.Add(registry_); + registry_observer_.Add(registry_); + reporter_observer_.Add(InstallationReporter::Get(profile_)); pref_change_registrar_.Init(pref_service_); pref_change_registrar_.Add( pref_names::kInstallForceList, @@ -132,7 +133,8 @@ } void InstallationTracker::OnShutdown(ExtensionRegistry*) { - observer_.RemoveAll(); + registry_observer_.RemoveAll(); + reporter_observer_.RemoveAll(); pref_change_registrar_.RemoveAll(); timer_->Stop(); } @@ -237,7 +239,8 @@ } reported_ = true; InstallationReporter::Get(profile_)->Clear(); - observer_.RemoveAll(); + registry_observer_.RemoveAll(); + reporter_observer_.RemoveAll(); pref_change_registrar_.RemoveAll(); timer_->Stop(); }
diff --git a/chrome/browser/extensions/forced_extensions/installation_tracker.h b/chrome/browser/extensions/forced_extensions/installation_tracker.h index 714241d1..6053d414 100644 --- a/chrome/browser/extensions/forced_extensions/installation_tracker.h +++ b/chrome/browser/extensions/forced_extensions/installation_tracker.h
@@ -121,7 +121,10 @@ // Tracks whether stats were already reported for the session. bool reported_ = false; - ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> observer_{this}; + ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> + registry_observer_{this}; + ScopedObserver<InstallationReporter, InstallationReporter::Observer> + reporter_observer_{this}; // Tracks installation reporting timeout. std::unique_ptr<base::OneShotTimer> timer_;
diff --git a/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc b/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc index 801fc048..0d85f11 100644 --- a/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc +++ b/chrome/browser/extensions/forced_extensions/installation_tracker_unittest.cc
@@ -165,8 +165,9 @@ kExtensionId2, InstallationReporter::FailureReason::CRX_INSTALL_ERROR_OTHER, CrxInstallErrorDetail::UNEXPECTED_ID); - EXPECT_TRUE(fake_timer_->IsRunning()); - fake_timer_->Fire(); + // InstallationTracker shuts down timer because all extension are either + // loaded or failed. + EXPECT_FALSE(fake_timer_->IsRunning()); histogram_tester_.ExpectTotalCount(kLoadTimeStats, 0); histogram_tester_.ExpectUniqueSample(kTimedOutStats, 2, 1); histogram_tester_.ExpectUniqueSample(kTimedOutNotInstalledStats, 2, 1);
diff --git a/chrome/browser/installedapp/installed_app_provider_unittest.cc b/chrome/browser/installedapp/installed_app_provider_unittest.cc new file mode 100644 index 0000000..c8c5288 --- /dev/null +++ b/chrome/browser/installedapp/installed_app_provider_unittest.cc
@@ -0,0 +1,196 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/android/jni_android.h" +#include "chrome/android/native_j_unittests_jni_headers/InstalledAppProviderTest_jni.h" +#include "testing/gtest/include/gtest/gtest.h" + +using base::android::AttachCurrentThread; + +class InstalledAppProviderTest : public ::testing::Test { + public: + InstalledAppProviderTest() { + JNIEnv* env = AttachCurrentThread(); + j_test_.Reset(Java_InstalledAppProviderTest_create(env)); + } + + void SetUp() override { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_setUp(env, j_test_); + } + + const base::android::ScopedJavaGlobalRef<jobject>& j_test() { + return j_test_; + } + + private: + base::android::ScopedJavaGlobalRef<jobject> j_test_; +}; + +TEST_F(InstalledAppProviderTest, TestOriginMissingParts) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOriginMissingParts(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestIncognitoWithOneInstalledRelatedApp) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testIncognitoWithOneInstalledRelatedApp( + env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestNoRelatedApps) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testNoRelatedApps(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneRelatedAppNoId) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppNoId(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneRelatedNonAndroidApp) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedNonAndroidApp(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneRelatedAppNotInstalled) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppNotInstalled(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, + TestOneRelatedAppBrokenAssetStatementsResource) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppBrokenAssetStatementsResource( + env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneRelatedAppNoAssetStatements) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppNoAssetStatements(env, + j_test()); +} + +TEST_F(InstalledAppProviderTest, + TestOneRelatedAppNoAssetStatementsNullMetadata) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppNoAssetStatementsNullMetadata( + env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneRelatedAppRelatedToDifferentOrigins) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneRelatedAppRelatedToDifferentOrigins( + env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestOneInstalledRelatedApp) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testOneInstalledRelatedApp(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestDynamicallyChangingUrl) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testDynamicallyChangingUrl(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestInstalledRelatedAppWithUrl) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testInstalledRelatedAppWithUrl(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestMultipleAssetStatements) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testMultipleAssetStatements(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementSyntaxError) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementSyntaxError(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNotArray) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNotArray(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementArrayNoObjects) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementArrayNoObjects(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNoRelation) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNoRelation(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNonStandardRelation) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNonStandardRelation(env, + j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNoTarget) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNoTarget(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNoNamespace) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNoNamespace(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestNonWebAssetStatement) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testNonWebAssetStatement(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementNoSite) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementNoSite(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementSiteSyntaxError) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementSiteSyntaxError(env, + j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementSiteMissingParts) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementSiteMissingParts(env, + j_test()); +} + +TEST_F(InstalledAppProviderTest, TestAssetStatementSiteHasPath) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testAssetStatementSiteHasPath(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestExtraInstalledApp) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testExtraInstalledApp(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestMultipleInstalledRelatedApps) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testMultipleInstalledRelatedApps(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestArtificialDelay) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testArtificialDelay(env, j_test()); +} + +TEST_F(InstalledAppProviderTest, TestMultipleAppsIncludingInstantApps) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testMultipleAppsIncludingInstantApps(env, + j_test()); +} + +TEST_F(InstalledAppProviderTest, TestRelatedAppsOverAllowedThreshold) { + JNIEnv* env = AttachCurrentThread(); + Java_InstalledAppProviderTest_testRelatedAppsOverAllowedThreshold(env, + j_test()); +}
diff --git a/chrome/browser/media/router/providers/cast/cast_session_tracker.cc b/chrome/browser/media/router/providers/cast/cast_session_tracker.cc index 0e2553f..e624c3a 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_tracker.cc +++ b/chrome/browser/media/router/providers/cast/cast_session_tracker.cc
@@ -183,7 +183,7 @@ for (auto& media : media_list) { const base::Value* media_session_id_value = media.FindKeyOfType("mediaSessionId", base::Value::Type::INTEGER); - if (!media_session_id_value) + if (!media_session_id_value || media.FindKey("media")) continue; auto session_media_it = std::find_if(
diff --git a/chrome/browser/media/router/providers/cast/cast_session_tracker.h b/chrome/browser/media/router/providers/cast/cast_session_tracker.h index bd744b5..1b4017f 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_tracker.h +++ b/chrome/browser/media/router/providers/cast/cast_session_tracker.h
@@ -110,6 +110,8 @@ HandleMediaStatusMessageFancy); FRIEND_TEST_ALL_PREFIXES(CastSessionTrackerTest, CopySavedMediaFieldsToMediaList); + FRIEND_TEST_ALL_PREFIXES(CastSessionTrackerTest, + DoNotCopySavedMediaFieldsWhenFieldPresent); }; } // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/cast_session_tracker_unittest.cc b/chrome/browser/media/router/providers/cast/cast_session_tracker_unittest.cc index 1bf1e217..ce1525c 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_tracker_unittest.cc +++ b/chrome/browser/media/router/providers/cast/cast_session_tracker_unittest.cc
@@ -7,6 +7,7 @@ #include "base/test/values_test_util.h" #include "chrome/browser/media/router/test/test_helper.h" #include "chrome/common/media_router/test/test_helper.h" +#include "components/cast_channel/cast_message_util.h" #include "components/cast_channel/cast_test_util.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -15,7 +16,9 @@ #include "testing/gtest/include/gtest/gtest.h" using base::test::IsJson; -using base::test::ParseJsonDeprecated; +using base::test::ParseJson; +using cast_channel::kMediaNamespace; +using cast_channel::kReceiverNamespace; using testing::_; using testing::ByRef; using testing::Eq; @@ -98,8 +101,8 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage( - cast_channel::CastMessageType::kReceiverStatus, "theNamespace", - std::move(*ParseJsonDeprecated(kReceiverStatus)))); + cast_channel::CastMessageType::kReceiverStatus, kReceiverNamespace, + ParseJson(kReceiverStatus))); session_ = session_tracker_.GetSessions().begin()->second.get(); ASSERT_TRUE(session_); @@ -144,8 +147,8 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage( - cast_channel::CastMessageType::kReceiverStatus, "theNamespace", - std::move(*ParseJsonDeprecated(kIdleReceiverStatus)))); + cast_channel::CastMessageType::kReceiverStatus, kReceiverNamespace, + ParseJson(kIdleReceiverStatus))); } TEST_F(CastSessionTrackerTest, GetSessions) { @@ -192,8 +195,7 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, - "theNamespace", - std::move(*ParseJsonDeprecated(R"({ + kMediaNamespace, ParseJson(R"({ "status": [{ "playerState": "anything but IDLE", "supportedMediaRequests": 0, @@ -201,7 +203,7 @@ "playerState": "IDLE", }, ], - })")))); + })"))); // Check that the stored media value is the same as the 'status' field in the // outgoing message. @@ -248,8 +250,7 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, - "theNamespace", - std::move(*ParseJsonDeprecated(R"({ + kMediaNamespace, ParseJson(R"({ "requestId": 12345, "status": [{ "playerState": "anything but IDLE", @@ -260,7 +261,7 @@ }, ], "xyzzy": "xyzzyValue2", - })")))); + })"))); // Check that the stored media value is the same as the 'status' field in the // outgoing message. @@ -280,8 +281,7 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, - "theNamespace", - std::move(*ParseJsonDeprecated(R"({ + kMediaNamespace, ParseJson(R"({ "status": [{ "media": "theMedia", "mediaSessionId": 345, @@ -290,7 +290,7 @@ "xyzzy": "xyzzy1", }, ], - })")))); + })"))); // Check that the stored media value is what we expected. ASSERT_THAT(*session_->value().FindKey("media"), IsJson(R"([{ @@ -327,8 +327,7 @@ session_tracker_.OnInternalMessage( sink_.cast_data().cast_channel_id, cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, - "theNamespace", - std::move(*ParseJsonDeprecated(R"({ + kMediaNamespace, ParseJson(R"({ "status": [{ "mediaSessionId": 345, "playerState": "anything but IDLE", @@ -336,7 +335,7 @@ "xyzzy": "xyzzy2", }, ], - })")))); + })"))); // Check that the stored media value is the same as the 'status' field in the // outgoing message. @@ -350,4 +349,49 @@ }])")); } +TEST_F(CastSessionTrackerTest, DoNotCopySavedMediaFieldsWhenFieldPresent) { + AddSinkAndSendReceiverStatusResponse(); + + // Add media status information to the session with mediaSessionId = 345. + session_tracker_.OnInternalMessage( + sink_.cast_data().cast_channel_id, + cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, + kMediaNamespace, ParseJson(R"({ + "status": [{ + "media": "oldMedia", + "mediaSessionId": 345, + "playerState": "anything but IDLE", + "supportedMediaRequests": 0, + "xyzzy": "xyzzy1", + }, + ], + })"))); + + // Receive a message referring to the previously stored mediaSessionId with a + // new 'media' value. + session_tracker_.OnInternalMessage( + sink_.cast_data().cast_channel_id, + cast_channel::InternalMessage(cast_channel::CastMessageType::kMediaStatus, + kMediaNamespace, ParseJson(R"({ + "status": [{ + "media": "newMedia", + "mediaSessionId": 345, + "playerState": "anything but IDLE", + "supportedMediaRequests": 0, + "xyzzy": "xyzzy2", + }, + ], + })"))); + + // Check that 'media' field has the new value rather than the cached value. + EXPECT_THAT(*session_->value().FindKey("media"), IsJson(R"([{ + "media": "newMedia", + "mediaSessionId": 345, + "playerState": "anything but IDLE", + "sessionId": "theSessionId", + "supportedMediaRequests": [], + "xyzzy": "xyzzy2", + }])")); +} + } // namespace media_router
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc index e4547f1..93982a0 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc +++ b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc
@@ -285,13 +285,9 @@ }; // TODO(https://crbug.com/1039813): Test fails consistently on MacOS 10.13 -#if defined(OS_MACOSX) -#define MAYBE_PreconnectSearchWithFeature DISABLED_PreconnectSearchWithFeature -#else -#define MAYBE_PreconnectSearchWithFeature PreconnectSearchWithFeature -#endif +// TODO(https://crbug.com/1040153): Test fails consistently on Win 7 as well. IN_PROC_BROWSER_TEST_F(NavigationPredictorPreconnectClientBrowserTestWithSearch, - MAYBE_PreconnectSearchWithFeature) { + DISABLED_PreconnectSearchWithFeature) { static const char kShortName[] = "test"; static const char kSearchURL[] = "/anchors_different_area.html?q={searchTerms}";
diff --git a/chrome/browser/notifications/scheduler/notification_schedule_service_factory.cc b/chrome/browser/notifications/scheduler/notification_schedule_service_factory.cc index 7ad74b9..eca323e 100644 --- a/chrome/browser/notifications/scheduler/notification_schedule_service_factory.cc +++ b/chrome/browser/notifications/scheduler/notification_schedule_service_factory.cc
@@ -23,18 +23,22 @@ #include "chrome/browser/notifications/scheduler/display_agent_android.h" #include "chrome/browser/notifications/scheduler/notification_background_task_scheduler_android.h" #include "chrome/browser/updates/update_notification_client.h" +#include "chrome/browser/updates/update_notification_service_factory.h" #endif // defined(OS_ANDROID) namespace { std::unique_ptr<notifications::NotificationSchedulerClientRegistrar> -RegisterClients() { +RegisterClients(content::BrowserContext* context) { auto client_registrar = std::make_unique<notifications::NotificationSchedulerClientRegistrar>(); // TODO(xingliu): Register clients here. #if defined(OS_ANDROID) // Register UpdateNotificationClient. + auto update_notification_service_callback = base::BindRepeating( + &UpdateNotificationServiceFactory::GetForBrowserContext, context); auto chrome_update_client = - std::make_unique<updates::UpdateNotificationClient>(); + std::make_unique<updates::UpdateNotificationClient>( + std::move(update_notification_service_callback)); client_registrar->RegisterClient( notifications::SchedulerClientType::kChromeUpdate, std::move(chrome_update_client)); @@ -72,7 +76,7 @@ auto* profile = Profile::FromBrowserContext(context); base::FilePath storage_dir = profile->GetPath().Append(chrome::kNotificationSchedulerStorageDirname); - auto client_registrar = RegisterClients(); + auto client_registrar = RegisterClients(context); #if defined(OS_ANDROID) auto display_agent = std::make_unique<DisplayAgentAndroid>(); auto background_task_scheduler =
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java index 81f3c2a9..20199b34 100644 --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -506,21 +506,41 @@ static List<String> createDeprecatedKeysForTesting() { // clang-format off return Arrays.asList( + "PhysicalWeb.ActivityReferral", + "PhysicalWeb.HasDeferredMetrics", + "PhysicalWeb.OptIn.DeclineButtonPressed", + "PhysicalWeb.OptIn.EnableButtonPressed", + "PhysicalWeb.Prefs.FeatureDisabled", + "PhysicalWeb.Prefs.FeatureEnabled", + "PhysicalWeb.Prefs.LocationDenied", + "PhysicalWeb.Prefs.LocationGranted", + "PhysicalWeb.ResolveTime.Background", + "PhysicalWeb.ResolveTime.Foreground", + "PhysicalWeb.ResolveTime.Refresh", + "PhysicalWeb.State", + "PhysicalWeb.TotalUrls.OnInitialDisplay", + "PhysicalWeb.TotalUrls.OnRefresh", + "PhysicalWeb.UrlSelected", "PrefMigrationVersion", "allow_low_end_device_ui", "allow_starting_service_manager_only", "bookmark_search_history", + "cellular_experiment", "chrome_home_enabled_date", "chrome_home_info_promo_shown", "chrome_home_opt_out_snackbar_shown", "chrome_home_user_enabled", "chrome_modern_design_enabled", "click_to_call_open_dialer_directly", + "crash_dump_upload", + "crash_dump_upload_no_cellular", "home_page_button_force_enabled", "homepage_tile_enabled", "inflate_toolbar_on_background_thread", "ntp_button_enabled", "ntp_button_variant", + "physical_web", + "physical_web_sharing", "sole_integration_enabled", "tab_persistent_store_task_runner_enabled", "webapk_number_of_uninstalls",
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js index 7a55a35..3f3fd2b 100644 --- a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js +++ b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js
@@ -328,7 +328,7 @@ * This is stored ID of currently focused element to restore id on returns * to this dialog from Language / Timezone Selection dialogs. */ - focusedElement_: 'languageSelectionButton', + focusedElement_: 'welcomeNextButton', onLanguageClicked_: function() { this.focusedElement_ = 'languageSelectionButton';
diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/browser/resources/hangout_services/manifest.json index 166d0ed..a474e9f 100644 --- a/chrome/browser/resources/hangout_services/manifest.json +++ b/chrome/browser/resources/hangout_services/manifest.json
@@ -5,7 +5,7 @@ "name": "Google Hangouts", // Note: Always update the version number when this file is updated. Chrome // triggers extension preferences update on the version increase. - "version": "1.3.14", + "version": "1.3.15", "manifest_version": 2, "externally_connectable": { "matches": [
diff --git a/chrome/browser/resources/hangout_services/thunk.js b/chrome/browser/resources/hangout_services/thunk.js index 061dca0..a619ce98 100644 --- a/chrome/browser/resources/hangout_services/thunk.js +++ b/chrome/browser/resources/hangout_services/thunk.js
@@ -232,9 +232,14 @@ if (method == 'chooseDesktopMedia') { const sources = message['sources']; let cancelId = null; - if (port.sender.tab) { + const tab = port.sender.tab; + if (tab) { + // Per crbug.com/425344, in order to allow an <iframe> on a different + // domain, to get desktop media, we need to set the tab.url to match + // the <iframe>, even though it doesn't really load the new url. + tab.url = port.sender.url; cancelId = chrome.desktopCapture.chooseDesktopMedia( - sources, port.sender.tab, sendResponse); + sources, tab, sendResponse); } else { const requestInfo = {}; requestInfo['guestProcessId'] = port.sender.guestProcessId || 0; @@ -246,7 +251,7 @@ port.onDisconnect.addListener(function() { // This method has no effect if called after the user has selected a // desktop media source, so it does not need to be conditional. - if (port.sender.tab) { + if (tab) { chrome.desktopCapture.cancelChooseDesktopMedia(cancelId); } else { chrome.webrtcDesktopCapturePrivate.cancelChooseDesktopMedia(cancelId);
diff --git a/chrome/browser/resources/new_tab_page/theme_icon.html b/chrome/browser/resources/new_tab_page/theme_icon.html index fbd4eff..9a133b45 100644 --- a/chrome/browser/resources/new_tab_page/theme_icon.html +++ b/chrome/browser/resources/new_tab_page/theme_icon.html
@@ -10,7 +10,12 @@ visibility: hidden; } - :host([selected]) #ring { + #checkMark { + visibility: hidden; + } + + :host([selected]) #ring, + :host([selected]) #checkMark { visibility: visible; } @@ -28,6 +33,14 @@ #rightColor { stop-color: var(--ntp-theme-icon-frame-color); } + + #checkMark circle { + fill: var(--google-blue-refresh-500); + } + + #checkMark path { + fill: white; + } </style> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> @@ -38,7 +51,13 @@ <stop id="rightColor" offset="100%"></stop> </linearGradient> </defs> - <!-- TODO(crbug.com/1032327): Add check mark when selected. --> <circle id="ring" cx="36" cy="36" r="36"></circle> <circle id="circle" cx="36" cy="36" r="32"></circle> + <g id="checkMark" transform="translate(48.5, 3.5)"> + <circle cx="10" cy="10" r="10"></circle> + <path d="m 2.9885708,9.99721 5.0109458,4.98792 0.00275,-0.003 + 0.024151,0.0227 8.9741604,-9.01557 -1.431323,-1.42476 -7.5742214,7.6092 + -3.6031671,-3.58665 z"> + </path> + </g> </svg>
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc index 12e3c4a..1caac1f 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc
@@ -283,6 +283,13 @@ base::FilePath::StringType extension(path.FinalExtension()); std::transform(extension.begin(), extension.end(), extension.begin(), tolower); + + // TODO: Replace this DCHECK with a static assert once std::is_sorted is + // constexpr in C++20. + DCHECK(std::is_sorted( + kSupportedDLPFileTypes.begin(), kSupportedDLPFileTypes.end(), + [](const base::FilePath::StringType& a, + const base::FilePath::StringType& b) { return a.compare(b) < 0; })); return std::binary_search(kSupportedDLPFileTypes.begin(), kSupportedDLPFileTypes.end(), extension); } @@ -583,9 +590,10 @@ void DeepScanningDialogDelegate::UploadFileForDeepScanning( const base::FilePath& path, std::unique_ptr<BinaryUploadService::Request> request) { - DCHECK_EQ( - DlpDeepScanningClientRequest::FILE_UPLOAD, - request->deep_scanning_request().dlp_scan_request().content_source()); + DCHECK( + !data_.do_dlp_scan || + (DlpDeepScanningClientRequest::FILE_UPLOAD == + request->deep_scanning_request().dlp_scan_request().content_source())); BinaryUploadService* upload_service = g_browser_process->safe_browsing_service()->GetBinaryUploadService( Profile::FromBrowserContext(web_contents_->GetBrowserContext()));
diff --git a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc index f43537e..fa0f2985 100644 --- a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h" +#include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_node.h" #include "components/policy/core/common/mock_configuration_policy_provider.h" #include "components/policy/core/common/policy_map.h" @@ -56,6 +57,7 @@ using bookmarks_helper::DeleteFaviconMappings; using bookmarks_helper::ExpireFavicon; using bookmarks_helper::GetBookmarkBarNode; +using bookmarks_helper::GetBookmarkModel; using bookmarks_helper::GetManagedNode; using bookmarks_helper::GetOtherNode; using bookmarks_helper::GetSyncedBookmarksNode; @@ -2144,6 +2146,38 @@ ASSERT_EQ(initial_count + 2, CountAllBookmarks(1)); } +IN_PROC_BROWSER_TEST_P(TwoClientBookmarksSyncTest, ReorderChildren) { + const GURL google_url("http://www.google.com"); + const GURL yahoo_url("http://www.yahoo.com"); + + ASSERT_TRUE(SetupClients()); + + ASSERT_NE(nullptr, AddURL(/*profile=*/0, /*index=*/0, "Google", google_url)); + ASSERT_NE(nullptr, AddURL(/*profile=*/0, /*index=*/1, "Yahoo", yahoo_url)); + + ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + ASSERT_EQ(2U, GetBookmarkBarNode(0)->children().size()); + ASSERT_EQ(2U, GetBookmarkBarNode(1)->children().size()); + ASSERT_EQ(google_url, GetBookmarkBarNode(0)->children().front()->url()); + ASSERT_EQ(google_url, GetBookmarkBarNode(1)->children().front()->url()); + ASSERT_EQ(yahoo_url, GetBookmarkBarNode(0)->children().back()->url()); + ASSERT_EQ(yahoo_url, GetBookmarkBarNode(1)->children().back()->url()); + + GetBookmarkModel(0)->ReorderChildren( + GetBookmarkBarNode(0), {GetBookmarkBarNode(0)->children().back().get(), + GetBookmarkBarNode(0)->children().front().get()}); + EXPECT_TRUE(BookmarksMatchChecker().Wait()); + + ASSERT_EQ(2U, GetBookmarkBarNode(0)->children().size()); + ASSERT_EQ(2U, GetBookmarkBarNode(1)->children().size()); + EXPECT_EQ(yahoo_url, GetBookmarkBarNode(0)->children().front()->url()); + EXPECT_EQ(yahoo_url, GetBookmarkBarNode(1)->children().front()->url()); + EXPECT_EQ(google_url, GetBookmarkBarNode(0)->children().back()->url()); + EXPECT_EQ(google_url, GetBookmarkBarNode(1)->children().back()->url()); +} + INSTANTIATE_TEST_SUITE_P(All, TwoClientBookmarksSyncTest, ::testing::Values(false, true));
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 94245543..9ffc63c6 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -3915,10 +3915,14 @@ "extensions/extension_install_ui_factory.h", "extensions/extension_installed_bubble.cc", "extensions/extension_installed_bubble.h", + "extensions/extension_installed_waiter.cc", + "extensions/extension_installed_waiter.h", "extensions/extension_message_bubble_bridge.cc", "extensions/extension_message_bubble_bridge.h", "extensions/extension_message_bubble_factory.cc", "extensions/extension_message_bubble_factory.h", + "extensions/extension_removal_watcher.cc", + "extensions/extension_removal_watcher.h", "extensions/extensions_container.h", "extensions/hosted_app_browser_controller.cc", "extensions/hosted_app_browser_controller.h",
diff --git a/chrome/browser/ui/extensions/extension_installed_bubble.cc b/chrome/browser/ui/extensions/extension_installed_bubble.cc index 98be5c8..cdb9953 100644 --- a/chrome/browser/ui/extensions/extension_installed_bubble.cc +++ b/chrome/browser/ui/extensions/extension_installed_bubble.cc
@@ -20,6 +20,8 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list_observer.h" +#include "chrome/browser/ui/extensions/extension_installed_waiter.h" +#include "chrome/browser/ui/extensions/extension_removal_watcher.h" #include "chrome/browser/ui/sync/sync_promo_ui.h" #include "chrome/common/extensions/api/extension_action/action_info.h" #include "chrome/common/extensions/api/omnibox/omnibox_handler.h" @@ -34,124 +36,6 @@ namespace { -// How long to wait for browser action animations to complete before retrying. -const int kAnimationWaitMs = 50; -// How often we retry when waiting for browser action animation to end. -const int kAnimationWaitRetries = 10; - -// Class responsible for showing the bubble after it's installed. Owns itself. -class ExtensionInstalledBubbleObserver - : public BrowserListObserver, - public extensions::ExtensionRegistryObserver { - public: - explicit ExtensionInstalledBubbleObserver( - scoped_refptr<const extensions::Extension> extension, - Browser* browser, - const SkBitmap& icon) - : extension_(extension), - browser_(browser), - icon_(icon), - animation_wait_retries_(0) { - // |extension| has been initialized but not loaded at this point. We need to - // wait on showing the Bubble until the EXTENSION_LOADED gets fired. - extension_registry_observer_.Add( - extensions::ExtensionRegistry::Get(browser->profile())); - BrowserList::AddObserver(this); - } - - void Run() { OnExtensionLoaded(nullptr, extension_.get()); } - - private: - ~ExtensionInstalledBubbleObserver() override { - BrowserList::RemoveObserver(this); - } - - // BrowserListObserver: - void OnBrowserClosing(Browser* browser) override { - if (browser_ == browser) { - // Browser is closing before the bubble was shown. - // TODO(hcarmona): Look into logging this with the BubbleManager. - delete this; - } - } - - // extensions::ExtensionRegistryObserver: - void OnExtensionLoaded(content::BrowserContext* browser_context, - const extensions::Extension* extension) override { - if (extension == extension_.get()) { - // PostTask to ourself to allow all EXTENSION_LOADED Observers to run. - // Only then can we be sure that a BrowserAction or PageAction has had - // views created which we can inspect for the purpose of previewing of - // pointing to them. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&ExtensionInstalledBubbleObserver::Initialize, - weak_factory_.GetWeakPtr())); - } - } - - void OnExtensionUnloaded( - content::BrowserContext* browser_context, - const extensions::Extension* extension, - extensions::UnloadedExtensionReason reason) override { - if (extension == extension_.get()) { - // Extension is going away. - delete this; - } - } - - void Initialize() { - bubble_ = - std::make_unique<ExtensionInstalledBubble>(extension_, browser_, icon_); - Show(); - } - - // Called internally via PostTask to show the bubble. - void Show() { - DCHECK(bubble_); - // TODO(hcarmona): Investigate having the BubbleManager query the bubble - // for |ShouldShow|. This is important because the BubbleManager may decide - // to delay showing the bubble. - if (bubble_->ShouldShow()) { - // Must be 2 lines because the manager will take ownership of bubble. - BubbleManager* manager = browser_->GetBubbleManager(); - manager->ShowBubble(std::move(bubble_)); - delete this; - return; - } - if (animation_wait_retries_++ < kAnimationWaitRetries) { - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&ExtensionInstalledBubbleObserver::Show, - weak_factory_.GetWeakPtr()), - base::TimeDelta::FromMilliseconds(kAnimationWaitMs)); - } else { - // Retries are over; won't try again. - // TODO(hcarmona): Look into logging this with the BubbleManager. - delete this; - } - } - - scoped_refptr<const extensions::Extension> extension_; - Browser* const browser_; - SkBitmap icon_; - - // The bubble that will be shown when the extension has finished installing. - std::unique_ptr<ExtensionInstalledBubble> bubble_; - - ScopedObserver<extensions::ExtensionRegistry, - extensions::ExtensionRegistryObserver> - extension_registry_observer_{this}; - - // The number of times to retry showing the bubble if |browser_'s| toolbar - // is animating. - int animation_wait_retries_; - - base::WeakPtrFactory<ExtensionInstalledBubbleObserver> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(ExtensionInstalledBubbleObserver); -}; - // Returns the keybinding for an extension command, or a null if none exists. std::unique_ptr<extensions::Command> GetCommand( const std::string& extension_id, @@ -246,6 +130,83 @@ return ExtensionInstalledBubble::ANCHOR_APP_MENU; } +// This helper class wraps the state needed to construct an +// ExtensionInstalledBubble. It is illegal to construct ExtensionInstalledBubble +// before the extension is installed, so we can't construct it directly to pass +// into the waiter; this class defers constructing it until it is actually +// needed. +class ExtensionUiWaiter { + public: + static void WaitForUi(scoped_refptr<const extensions::Extension> extension, + Browser* browser, + const SkBitmap& icon) { + (new ExtensionUiWaiter(extension, browser, icon))->Wait(); + } + + ExtensionUiWaiter(const ExtensionUiWaiter& other) = delete; + ExtensionUiWaiter& operator=(const ExtensionUiWaiter& other) = delete; + + private: + // This class manages its own lifetime. + ExtensionUiWaiter(scoped_refptr<const extensions::Extension> extension, + Browser* browser, + const SkBitmap& icon) + : extension_(extension), browser_(browser), icon_(icon) { + removal_watcher_ = std::make_unique<ExtensionRemovalWatcher>( + browser, extension, + base::Bind(&ExtensionUiWaiter::OnExtensionRemoved, + weak_factory_.GetWeakPtr())); + } + virtual ~ExtensionUiWaiter() = default; + + void Wait() { + DCHECK(extensions::ExtensionRegistry::Get(browser_->profile()) + ->enabled_extensions() + .GetByID(extension_->id())); + + constexpr int kMaxRetries = 10; + constexpr auto kRetryDelay = base::TimeDelta::FromMilliseconds(50); + if (!bubble_) { + bubble_ = std::make_unique<ExtensionInstalledBubble>(extension_, browser_, + std::move(icon_)); + } + + if (bubble_->ShouldShow()) { + Show(); + return; + } + + if (retries_++ >= kMaxRetries) { + StopWaiting(); + return; + } + + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&ExtensionUiWaiter::Wait, weak_factory_.GetWeakPtr()), + kRetryDelay); + } + + void StopWaiting() { delete this; } + + void Show() { + BubbleManager* manager = browser_->GetBubbleManager(); + manager->ShowBubble(std::move(bubble_)); + delete this; + } + + void OnExtensionRemoved() { delete this; } + + const scoped_refptr<const extensions::Extension> extension_; + Browser* browser_; + SkBitmap icon_; + std::unique_ptr<ExtensionInstalledBubble> bubble_; + std::unique_ptr<ExtensionRemovalWatcher> removal_watcher_; + int retries_ = 0; + + base::WeakPtrFactory<ExtensionUiWaiter> weak_factory_{this}; +}; + } // namespace // static @@ -253,15 +214,12 @@ scoped_refptr<const extensions::Extension> extension, Browser* browser, const SkBitmap& icon) { - // The ExtensionInstalledBubbleObserver will delete itself when the - // ExtensionInstalledBubble is shown or when it can't be shown anymore. - auto* observer = - new ExtensionInstalledBubbleObserver(extension, browser, icon); - extensions::ExtensionRegistry* reg = - extensions::ExtensionRegistry::Get(browser->profile()); - if (reg->enabled_extensions().GetByID(extension->id())) { - observer->Run(); - } + // Wait for the extension to become installed, then wait for its UI to become + // ready. ExtensionUiWaiter will handle creating and displaying the actual + // bubble once the UI is ready. + ExtensionInstalledWaiter::WaitForInstall( + extension, browser, + base::BindOnce(&ExtensionUiWaiter::WaitForUi, extension, browser, icon)); } ExtensionInstalledBubble::ExtensionInstalledBubble(
diff --git a/chrome/browser/ui/extensions/extension_installed_waiter.cc b/chrome/browser/ui/extensions/extension_installed_waiter.cc new file mode 100644 index 0000000..05f86362 --- /dev/null +++ b/chrome/browser/ui/extensions/extension_installed_waiter.cc
@@ -0,0 +1,84 @@ +// 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 "chrome/browser/ui/extensions/extension_installed_waiter.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" + +namespace { +base::RepeatingClosure* g_giving_up_callback = nullptr; +} // namespace + +// static +void ExtensionInstalledWaiter::WaitForInstall( + scoped_refptr<const extensions::Extension> extension, + Browser* browser, + base::OnceClosure done_callback) { + (new ExtensionInstalledWaiter(extension, browser, std::move(done_callback))) + ->RunCallbackIfExtensionInstalled(); +} + +void ExtensionInstalledWaiter::SetGivingUpCallbackForTesting( + base::RepeatingClosure callback) { + if (g_giving_up_callback) + delete g_giving_up_callback; + if (!callback.is_null()) + g_giving_up_callback = new base::RepeatingClosure(callback); + else + g_giving_up_callback = nullptr; +} + +ExtensionInstalledWaiter::ExtensionInstalledWaiter( + scoped_refptr<const extensions::Extension> extension, + Browser* browser, + base::OnceClosure done_callback) + : extension_(extension), + browser_(browser), + done_callback_(std::move(done_callback)) { + extension_registry_observer_.Add( + extensions::ExtensionRegistry::Get(browser->profile())); + removal_watcher_ = std::make_unique<ExtensionRemovalWatcher>( + browser, extension, + base::Bind(&ExtensionInstalledWaiter::OnExtensionRemoved, + weak_factory_.GetWeakPtr())); +} + +ExtensionInstalledWaiter::~ExtensionInstalledWaiter() { + if (done_callback_) + g_giving_up_callback->Run(); +} + +void ExtensionInstalledWaiter::RunCallbackIfExtensionInstalled() { + if (IsExtensionInstalled()) { + std::move(done_callback_).Run(); + delete this; + return; + } +} + +bool ExtensionInstalledWaiter::IsExtensionInstalled() const { + extensions::ExtensionRegistry* registry = + extensions::ExtensionRegistry::Get(browser_->profile()); + return registry->enabled_extensions().GetByID(extension_->id()); +} + +void ExtensionInstalledWaiter::OnExtensionLoaded( + content::BrowserContext* browser_context, + const extensions::Extension* extension) { + if (extension != extension_.get()) + return; + + // Only call Wait() after all the other extension observers have had a chance + // to run. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&ExtensionInstalledWaiter::RunCallbackIfExtensionInstalled, + weak_factory_.GetWeakPtr())); +} + +void ExtensionInstalledWaiter::OnExtensionRemoved() { + delete this; +}
diff --git a/chrome/browser/ui/extensions/extension_installed_waiter.h b/chrome/browser/ui/extensions/extension_installed_waiter.h new file mode 100644 index 0000000..3dbe58b --- /dev/null +++ b/chrome/browser/ui/extensions/extension_installed_waiter.h
@@ -0,0 +1,76 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_WAITER_H_ +#define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_WAITER_H_ + +#include "base/callback.h" +#include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" +#include "base/time/time.h" +#include "chrome/browser/ui/extensions/extension_removal_watcher.h" +#include "extensions/browser/extension_registry.h" +#include "extensions/browser/extension_registry_observer.h" + +class Browser; + +// ExtensionInstalledWaiter is used to wait for a given extension to be +// installed in a given browser's profile. +class ExtensionInstalledWaiter : public extensions::ExtensionRegistryObserver { + public: + // Wait until both: + // 1. |extension| is installed into |browser| + // 2. All EXTENSION_LOADED observers have been notified of (1) + // and then invoke |done_callback|. + // If either |browser| is destroyed or |extension| is uninstalled from it + // before that happens, |done_callback| is not run. + static void WaitForInstall( + scoped_refptr<const extensions::Extension> extension, + Browser* browser, + base::OnceClosure done_callback); + + // Sets a callback for testing purposes to be invoked whenever an + // ExtensionInstalledWaiter gives up on waiting for any reason. You should not + // need this in production code! + static void SetGivingUpCallbackForTesting(base::RepeatingClosure callback); + + private: + // This class manages its own lifetime. + ExtensionInstalledWaiter(scoped_refptr<const extensions::Extension> extension, + Browser* browser, + base::OnceClosure done_callback); + ~ExtensionInstalledWaiter() override; + + ExtensionInstalledWaiter(const ExtensionInstalledWaiter& other) = delete; + ExtensionInstalledWaiter& operator=(const ExtensionInstalledWaiter& other) = + delete; + + // Check if the extension is installed. If so, run |done_callback_| and + // self-destruct. + void RunCallbackIfExtensionInstalled(); + + // Returns whether condition (1) as described above WaitForInstall + // are true. Condition (2) is guaranteed by logic in OnExtensionLoaded. + bool IsExtensionInstalled() const; + + // ExtensionRegistryObserver: + void OnExtensionLoaded(content::BrowserContext* browser_context, + const extensions::Extension* extension) override; + + void OnExtensionRemoved(); + + const scoped_refptr<const extensions::Extension> extension_; + const Browser* const browser_; + base::OnceClosure done_callback_; + + ScopedObserver<extensions::ExtensionRegistry, + extensions::ExtensionRegistryObserver> + extension_registry_observer_{this}; + + std::unique_ptr<ExtensionRemovalWatcher> removal_watcher_; + + base::WeakPtrFactory<ExtensionInstalledWaiter> weak_factory_{this}; +}; + +#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_WAITER_H_
diff --git a/chrome/browser/ui/extensions/extension_installed_waiter_unittest.cc b/chrome/browser/ui/extensions/extension_installed_waiter_unittest.cc new file mode 100644 index 0000000..3b670cc --- /dev/null +++ b/chrome/browser/ui/extensions/extension_installed_waiter_unittest.cc
@@ -0,0 +1,142 @@ +// 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 "chrome/browser/ui/extensions/extension_installed_waiter.h" + +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/load_error_reporter.h" +#include "chrome/browser/extensions/test_extension_system.h" +#include "chrome/test/base/browser_with_test_window_test.h" +#include "content/public/test/browser_task_environment.h" +#include "extensions/browser/extension_system.h" +#include "extensions/common/extension_builder.h" +#include "testing/gtest/include/gtest/gtest.h" + +using extensions::Extension; + +class ExtensionInstalledWaiterTest : public BrowserWithTestWindowTest { + public: + ExtensionInstalledWaiterTest() + : BrowserWithTestWindowTest( + base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} + ~ExtensionInstalledWaiterTest() override = default; + + void SetUp() override { + BrowserWithTestWindowTest::SetUp(); + extensions::LoadErrorReporter::Init(false); + extensions::TestExtensionSystem* extension_system = + static_cast<extensions::TestExtensionSystem*>( + extensions::ExtensionSystem::Get(profile())); + extension_system->CreateExtensionService( + base::CommandLine::ForCurrentProcess(), base::FilePath(), false); + extension_service_ = + extensions::ExtensionSystem::Get(profile())->extension_service(); + } + + void TearDown() override { + ExtensionInstalledWaiter::SetGivingUpCallbackForTesting( + base::NullCallback()); + BrowserWithTestWindowTest::TearDown(); + } + + void WaitFor(scoped_refptr<const Extension> extension, + Browser* test_browser = nullptr) { + ExtensionInstalledWaiter::SetGivingUpCallbackForTesting(base::BindRepeating( + &ExtensionInstalledWaiterTest::GivingUp, base::Unretained(this))); + if (!test_browser) + test_browser = browser(); + ExtensionInstalledWaiter::WaitForInstall( + extension, test_browser, + base::BindOnce(&ExtensionInstalledWaiterTest::Done, + base::Unretained(this))); + } + + void Done() { done_called_++; } + void GivingUp() { giving_up_called_++; } + + protected: + int done_called_ = 0; + int giving_up_called_ = 0; + + scoped_refptr<const Extension> MakeExtensionNamed(const std::string& name) { + return extensions::ExtensionBuilder(name).Build(); + } + + extensions::ExtensionService* extension_service() { + return extension_service_; + } + + private: + extensions::ExtensionService* extension_service_ = nullptr; +}; + +TEST_F(ExtensionInstalledWaiterTest, ExtensionIsAlreadyInstalled) { + auto extension = MakeExtensionNamed("foo"); + extension_service()->AddExtension(extension.get()); + + WaitFor(extension); + EXPECT_EQ(1, done_called_); +} + +TEST_F(ExtensionInstalledWaiterTest, ExtensionInstall) { + auto extension = MakeExtensionNamed("foo"); + + WaitFor(extension); + EXPECT_EQ(0, done_called_); + + extension_service()->AddExtension(extension.get()); + + // ExtensionInstalledWaiter must *not* call the done callback on the same + // runloop cycle as the extension installation, to allow all the other + // observers to run. + EXPECT_FALSE(task_environment()->MainThreadIsIdle()); + EXPECT_EQ(0, done_called_); + + task_environment()->RunUntilIdle(); + EXPECT_EQ(1, done_called_); +} + +TEST_F(ExtensionInstalledWaiterTest, NotTheExtensionYouAreLookingFor) { + auto foo = MakeExtensionNamed("foo"); + auto bar = MakeExtensionNamed("bar"); + + WaitFor(foo); + EXPECT_EQ(0, done_called_); + + extension_service()->AddExtension(bar.get()); + task_environment()->RunUntilIdle(); + EXPECT_EQ(0, done_called_); + + extension_service()->AddExtension(foo.get()); + task_environment()->RunUntilIdle(); + EXPECT_EQ(1, done_called_); +} + +TEST_F(ExtensionInstalledWaiterTest, ExtensionUninstalledWhileWaiting) { + auto extension = MakeExtensionNamed("foo"); + + WaitFor(extension); + EXPECT_EQ(0, done_called_); + + extension_service()->AddExtension(extension.get()); + extension_service()->UnloadExtension( + extension->id(), extensions::UnloadedExtensionReason::UNINSTALL); + EXPECT_EQ(1, giving_up_called_); + + task_environment()->RunUntilIdle(); + EXPECT_EQ(0, done_called_); +} + +TEST_F(ExtensionInstalledWaiterTest, BrowserShutdownWhileWaiting) { + std::unique_ptr<BrowserWindow> window = CreateBrowserWindow(); + std::unique_ptr<Browser> browser = + CreateBrowser(profile(), Browser::TYPE_NORMAL, false, window.get()); + + auto foo = MakeExtensionNamed("foo"); + WaitFor(foo, browser.get()); + + browser->OnWindowClosing(); + EXPECT_EQ(1, giving_up_called_); + EXPECT_EQ(0, done_called_); +}
diff --git a/chrome/browser/ui/extensions/extension_removal_watcher.cc b/chrome/browser/ui/extensions/extension_removal_watcher.cc new file mode 100644 index 0000000..2d1ed12a --- /dev/null +++ b/chrome/browser/ui/extensions/extension_removal_watcher.cc
@@ -0,0 +1,36 @@ +// 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 "chrome/browser/ui/extensions/extension_removal_watcher.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" + +ExtensionRemovalWatcher::ExtensionRemovalWatcher( + Browser* browser, + scoped_refptr<const extensions::Extension> extension, + base::OnceClosure callback) + : browser_(browser), extension_(extension), callback_(std::move(callback)) { + extension_registry_observer_.Add( + extensions::ExtensionRegistry::Get(browser->profile())); + BrowserList::AddObserver(this); +} + +ExtensionRemovalWatcher::~ExtensionRemovalWatcher() { + BrowserList::RemoveObserver(this); +} + +void ExtensionRemovalWatcher::OnBrowserClosing(Browser* browser) { + if (browser == browser_ && callback_) + std::move(callback_).Run(); +} + +void ExtensionRemovalWatcher::OnExtensionUnloaded( + content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UnloadedExtensionReason reason) { + if (extension == extension_.get() && callback_) + std::move(callback_).Run(); +}
diff --git a/chrome/browser/ui/extensions/extension_removal_watcher.h b/chrome/browser/ui/extensions/extension_removal_watcher.h new file mode 100644 index 0000000..ed6ef45c --- /dev/null +++ b/chrome/browser/ui/extensions/extension_removal_watcher.h
@@ -0,0 +1,45 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_ +#define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_ + +#include "base/callback.h" +#include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" +#include "chrome/browser/ui/browser_list_observer.h" +#include "extensions/browser/extension_registry.h" +#include "extensions/browser/extension_registry_observer.h" + +// ExtensionRemovalWatcher watches a browser and an extension for either: +// 1) The browser being closed, or +// 2) The extension being uninstalled from the browser's profile +// and in either case, invokes the provided callback. +class ExtensionRemovalWatcher : public BrowserListObserver, + public extensions::ExtensionRegistryObserver { + public: + ExtensionRemovalWatcher(Browser* browser, + scoped_refptr<const extensions::Extension> extension, + base::OnceClosure callback); + ~ExtensionRemovalWatcher() override; + + private: + // ExtensionRegistryObserver: + void OnExtensionUnloaded(content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UnloadedExtensionReason reason) override; + + // BrowserListObserver: + void OnBrowserClosing(Browser* browser) override; + + const Browser* browser_; + const scoped_refptr<const extensions::Extension> extension_; + base::OnceClosure callback_; + + ScopedObserver<extensions::ExtensionRegistry, + extensions::ExtensionRegistryObserver> + extension_registry_observer_{this}; +}; + +#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc index 63529eed..e0eaf0e 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -46,10 +46,7 @@ g_browser_process->profile_manager()-> GetProfileAttributesStorage().AddObserver(this); } - if (browser_view_->tabstrip()) { - DCHECK(!tab_strip_observer_.IsObserving(browser_view_->tabstrip())); - tab_strip_observer_.Add(browser_view_->tabstrip()); - } + MaybeObserveTabstrip(); } BrowserNonClientFrameView::~BrowserNonClientFrameView() { @@ -61,6 +58,7 @@ } void BrowserNonClientFrameView::OnBrowserViewInitViewsComplete() { + MaybeObserveTabstrip(); UpdateMinimumSize(); } @@ -387,6 +385,13 @@ } #endif +void BrowserNonClientFrameView::MaybeObserveTabstrip() { + if (browser_view_->tabstrip()) { + DCHECK(!tab_strip_observer_.IsObserving(browser_view_->tabstrip())); + tab_strip_observer_.Add(browser_view_->tabstrip()); + } +} + const ui::ThemeProvider* BrowserNonClientFrameView::GetThemeProviderForProfile() const { // Because the frame's accessor reads the ThemeProvider from the profile and
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h index 62df95c..e0a92ab5 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
@@ -177,6 +177,8 @@ int GetSystemMenuY() const override; #endif + void MaybeObserveTabstrip(); + // Gets a theme provider that should be non-null even before we're added to a // view hierarchy. const ui::ThemeProvider* GetThemeProviderForProfile() const;
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 34d47dfd..c6c1235 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -430,72 +430,6 @@ browser_->tab_strip_model()->AddObserver(this); immersive_mode_controller_ = chrome::CreateImmersiveModeController(); md_observer_.Add(ui::MaterialDesignController::GetInstance()); - - // Top container holds tab strip region and toolbar and lives at the front of - // the view hierarchy. - top_container_ = AddChildView(std::make_unique<TopContainerView>(this)); - tab_strip_region_view_ = - top_container_->AddChildView(std::make_unique<TabStripRegionView>()); - - // TabStrip takes ownership of the controller. - auto tabstrip_controller = std::make_unique<BrowserTabStripController>( - browser_->tab_strip_model(), this); - BrowserTabStripController* tabstrip_controller_ptr = - tabstrip_controller.get(); - tabstrip_ = tab_strip_region_view_->AddChildView(std::make_unique<TabStrip>( - std::move(tabstrip_controller))); // Takes ownership. - tabstrip_controller_ptr->InitFromModel(tabstrip_); - - // Create WebViews early so |webui_tab_strip_| can observe their size. - auto devtools_web_view = - std::make_unique<views::WebView>(browser_->profile()); - devtools_web_view->SetID(VIEW_ID_DEV_TOOLS_DOCKED); - devtools_web_view->SetVisible(false); - - auto contents_web_view = - std::make_unique<ContentsWebView>(browser_->profile()); - contents_web_view->SetID(VIEW_ID_TAB_CONTAINER); - contents_web_view->SetEmbedFullscreenWidgetMode(true); - - auto contents_container = std::make_unique<views::View>(); - devtools_web_view_ = - contents_container->AddChildView(std::move(devtools_web_view)); - contents_web_view_ = - contents_container->AddChildView(std::move(contents_web_view)); - contents_container->SetLayoutManager(std::make_unique<ContentsLayoutManager>( - devtools_web_view_, contents_web_view_)); - - toolbar_ = top_container_->AddChildView( - std::make_unique<ToolbarView>(browser_.get(), this)); - - contents_separator_ = - top_container_->AddChildView(std::make_unique<ContentsSeparator>()); - - web_contents_close_handler_ = - std::make_unique<WebContentsCloseHandler>(contents_web_view_); - - contents_container_ = AddChildView(std::move(contents_container)); - set_contents_view(contents_container_); - - // InfoBarContainer needs to be added as a child here for drop-shadow, but - // needs to come after toolbar in focus order (see EnsureFocusOrder()). - infobar_container_ = - AddChildView(std::make_unique<InfoBarContainerView>(this)); - - InitStatusBubble(); - - // Create do-nothing view for the sake of controlling the z-order of the find - // bar widget. - find_bar_host_view_ = AddChildView(std::make_unique<View>()); - -#if defined(OS_WIN) - // Create a custom JumpList and add it to an observer of TabRestoreService - // so we can update the custom JumpList when a tab is added or removed. - if (JumpList::Enabled()) - load_complete_listener_ = std::make_unique<LoadCompleteListener>(this); -#endif - - MaybeInitializeWebUITabStrip(); } BrowserView::~BrowserView() { @@ -2545,78 +2479,19 @@ void BrowserView::ViewHierarchyChanged( const views::ViewHierarchyChangedDetails& details) { - // Override here in order to suppress the call to - // views::ClientView::ViewHierarchyChanged(); -} + if (details.child != this) + return; -void BrowserView::AddedToWidget() { - views::ClientView::AddedToWidget(); + // On removal, this class may not have a widget anymore, so go to the parent. + auto* widget = details.is_add ? GetWidget() : details.parent->GetWidget(); + if (!widget) + return; -#if defined(OS_CHROMEOS) - // TopControlsSlideController must be initialized here in AddedToWidget() - // rather than Init() as it depends on the browser frame being ready. - if (IsBrowserTypeNormal()) { - DCHECK(frame_); - top_controls_slide_controller_ = - std::make_unique<TopControlsSlideControllerChromeOS>(this); + bool init = !initialized_ && details.is_add; + if (init) { + InitViews(); + initialized_ = true; } -#endif - - GetWidget()->AddObserver(this); - - // Stow a pointer to this object onto the window handle so that we can get at - // it later when all we have is a native view. - GetWidget()->SetNativeWindowProperty(kBrowserViewKey, this); - - // Stow a pointer to the browser's profile onto the window handle so that we - // can get it later when all we have is a native view. - GetWidget()->SetNativeWindowProperty(Profile::kProfileKey, - browser_->profile()); - -#if defined(USE_AURA) - // Stow a pointer to the browser's profile onto the window handle so - // that windows will be styled with the appropriate NativeTheme. - SetThemeProfileForWindow(GetNativeWindow(), browser_->profile()); -#endif - - toolbar_->Init(); - - LoadAccelerators(); - - // |immersive_mode_controller_| may depend on the presence of a Widget, so it - // is initialized here. - immersive_mode_controller_->Init(this); - immersive_mode_controller_->AddObserver(this); - - // See https://crbug.com/993502. - views::View* web_footer_experiment = nullptr; - if (base::FeatureList::IsEnabled(features::kWebFooterExperiment)) { - web_footer_experiment = AddChildView( - std::make_unique<WebFooterExperimentView>(browser_->profile())); - } - - // TODO(https://crbug.com/1036519): Remove BrowserViewLayout dependence on - // Widget and move to the constructor. - auto browser_view_layout = std::make_unique<BrowserViewLayout>( - std::make_unique<BrowserViewLayoutDelegateImpl>(this), - GetWidget()->GetNativeView(), this, top_container_, - tab_strip_region_view_, tabstrip_, toolbar_, infobar_container_, - contents_container_, immersive_mode_controller_.get(), - web_footer_experiment, contents_separator_); - SetLayoutManager(std::move(browser_view_layout)); - - EnsureFocusOrder(); - - // This browser view may already have a custom button provider set (e.g the - // hosted app frame). - if (!toolbar_button_provider_) - SetToolbarButtonProvider(toolbar_); - - frame_->OnBrowserViewInitViewsComplete(); - frame_->GetFrameView()->UpdateMinimumSize(); - using_native_frame_ = frame_->ShouldUseNativeFrame(); - - initialized_ = true; } void BrowserView::PaintChildren(const views::PaintInfo& paint_info) { @@ -2695,6 +2570,131 @@ ToolbarSizeChanged(is_animating); } +void BrowserView::InitViews() { + // TopControlsSlideController must be initialized here in InitViews() rather + // than Init() as it depends on the browser frame being ready. +#if defined(OS_CHROMEOS) + if (IsBrowserTypeNormal()) { + DCHECK(frame_); + top_controls_slide_controller_ = + std::make_unique<TopControlsSlideControllerChromeOS>(this); + } +#endif + + GetWidget()->AddObserver(this); + + // Stow a pointer to this object onto the window handle so that we can get at + // it later when all we have is a native view. + GetWidget()->SetNativeWindowProperty(kBrowserViewKey, this); + + // Stow a pointer to the browser's profile onto the window handle so that we + // can get it later when all we have is a native view. + GetWidget()->SetNativeWindowProperty(Profile::kProfileKey, + browser_->profile()); + +#if defined(USE_AURA) + // Stow a pointer to the browser's profile onto the window handle so + // that windows will be styled with the appropriate NativeTheme. + SetThemeProfileForWindow(GetNativeWindow(), browser_->profile()); +#endif + + LoadAccelerators(); + + // Top container holds tab strip region and toolbar and lives at the front of + // the view hierarchy. + top_container_ = new TopContainerView(this); + AddChildView(top_container_); + tab_strip_region_view_ = new TabStripRegionView(); + top_container_->AddChildView(tab_strip_region_view_); + + // TabStrip takes ownership of the controller. + BrowserTabStripController* tabstrip_controller = + new BrowserTabStripController(browser_->tab_strip_model(), this); + tabstrip_ = + new TabStrip(std::unique_ptr<TabStripController>(tabstrip_controller)); + tab_strip_region_view_->AddChildView(tabstrip_); // Takes ownership. + tabstrip_controller->InitFromModel(tabstrip_); + + // Create WebViews early so |webui_tab_strip_| can observe their size. + devtools_web_view_ = new views::WebView(browser_->profile()); + devtools_web_view_->SetID(VIEW_ID_DEV_TOOLS_DOCKED); + devtools_web_view_->SetVisible(false); + + contents_web_view_ = new ContentsWebView(browser_->profile()); + contents_web_view_->SetID(VIEW_ID_TAB_CONTAINER); + contents_web_view_->SetEmbedFullscreenWidgetMode(true); + + contents_container_ = new views::View(); + contents_container_->AddChildView(devtools_web_view_); + contents_container_->AddChildView(contents_web_view_); + contents_container_->SetLayoutManager(std::make_unique<ContentsLayoutManager>( + devtools_web_view_, contents_web_view_)); + + toolbar_ = top_container_->AddChildView( + std::make_unique<ToolbarView>(browser_.get(), this)); + toolbar_->Init(); + + contents_separator_ = + top_container_->AddChildView(std::make_unique<ContentsSeparator>()); + + // This browser view may already have a custom button provider set (e.g the + // hosted app frame). + if (!toolbar_button_provider_) + SetToolbarButtonProvider(toolbar_); + + web_contents_close_handler_.reset( + new WebContentsCloseHandler(contents_web_view_)); + + AddChildView(contents_container_); + set_contents_view(contents_container_); + + // InfoBarContainer needs to be added as a child here for drop-shadow, but + // needs to come after toolbar in focus order (see EnsureFocusOrder()). + infobar_container_ = new InfoBarContainerView(this); + AddChildView(infobar_container_); + + InitStatusBubble(); + + // Create do-nothing view for the sake of controlling the z-order of the find + // bar widget. + find_bar_host_view_ = new View(); + AddChildView(find_bar_host_view_); + + immersive_mode_controller_->Init(this); + immersive_mode_controller_->AddObserver(this); + + // See https://crbug.com/993502. + views::View* web_footer_experiment = nullptr; + if (base::FeatureList::IsEnabled(features::kWebFooterExperiment)) { + web_footer_experiment = AddChildView( + std::make_unique<WebFooterExperimentView>(browser_->profile())); + } + + auto browser_view_layout = std::make_unique<BrowserViewLayout>( + std::make_unique<BrowserViewLayoutDelegateImpl>(this), + GetWidget()->GetNativeView(), this, top_container_, + tab_strip_region_view_, tabstrip_, toolbar_, infobar_container_, + contents_container_, immersive_mode_controller_.get(), + web_footer_experiment, contents_separator_); + SetLayoutManager(std::move(browser_view_layout)); + + EnsureFocusOrder(); + +#if defined(OS_WIN) + // Create a custom JumpList and add it to an observer of TabRestoreService + // so we can update the custom JumpList when a tab is added or removed. + if (JumpList::Enabled()) { + load_complete_listener_ = std::make_unique<LoadCompleteListener>(this); + } +#endif + + frame_->OnBrowserViewInitViewsComplete(); + frame_->GetFrameView()->UpdateMinimumSize(); + using_native_frame_ = frame_->ShouldUseNativeFrame(); + + MaybeInitializeWebUITabStrip(); +} + void BrowserView::MaybeInitializeWebUITabStrip() { #if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) if (browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) &&
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index dde5b3b..4bf8b2c 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -498,7 +498,6 @@ void OnGestureEvent(ui::GestureEvent* event) override; void ViewHierarchyChanged( const views::ViewHierarchyChangedDetails& details) override; - void AddedToWidget() override; void PaintChildren(const views::PaintInfo& paint_info) override; void OnBoundsChanged(const gfx::Rect& previous_bounds) override; void ChildPreferredSizeChanged(View* child) override; @@ -580,6 +579,9 @@ // affected. void RevealTabStripIfNeeded(); + // Constructs and initializes the child views. + void InitViews(); + // Make sure the WebUI tab strip exists if it should. void MaybeInitializeWebUITabStrip();
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc index 4e8b77f2..7ea7416 100644 --- a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc
@@ -106,6 +106,7 @@ : LocationBarBubbleDelegateView(anchor_view, web_contents), controller_(controller) { observer_.Add(controller); + DialogDelegate::set_buttons(ui::DIALOG_BUTTON_NONE); } CookieControlsBubbleView::~CookieControlsBubbleView() = default; @@ -151,6 +152,18 @@ if (extra_view_) extra_view_->SetVisible(false); } + + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + intermediate_step_ == IntermediateStep::kTurnOffButton + ? l10n_util::GetStringUTF16(IDS_COOKIE_CONTROLS_TURN_OFF_BUTTON) + : l10n_util::GetStringUTF16(IDS_COOKIE_CONTROLS_TURN_ON_BUTTON)); + DialogDelegate::set_buttons( + (intermediate_step_ == IntermediateStep::kTurnOffButton || + status_ == CookieControlsController::Status::kDisabledForSite) + ? ui::DIALOG_BUTTON_OK + : ui::DIALOG_BUTTON_NONE); + DialogModelChanged(); Layout(); @@ -168,23 +181,6 @@ LocationBarBubbleDelegateView::CloseBubble(); } -int CookieControlsBubbleView::GetDialogButtons() const { - if (intermediate_step_ == IntermediateStep::kTurnOffButton || - status_ == CookieControlsController::Status::kDisabledForSite) { - return ui::DIALOG_BUTTON_OK; - } - return ui::DIALOG_BUTTON_NONE; -} - -base::string16 CookieControlsBubbleView::GetDialogButtonLabel( - ui::DialogButton button) const { - if (intermediate_step_ == IntermediateStep::kTurnOffButton) - return l10n_util::GetStringUTF16(IDS_COOKIE_CONTROLS_TURN_OFF_BUTTON); - DCHECK_EQ(status_, CookieControlsController::Status::kDisabledForSite); - DCHECK_EQ(intermediate_step_, IntermediateStep::kNone); - return l10n_util::GetStringUTF16(IDS_COOKIE_CONTROLS_TURN_ON_BUTTON); -} - void CookieControlsBubbleView::Init() { const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); SetLayoutManager(std::make_unique<views::BoxLayout>(
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.h b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.h index 6de68c6..45ef2cf 100644 --- a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.h +++ b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.h
@@ -55,8 +55,6 @@ // LocationBarBubbleDelegateView: void CloseBubble() override; - int GetDialogButtons() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; void Init() override; base::string16 GetWindowTitle() const override; bool ShouldShowWindowTitle() const override;
diff --git a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc index 596f9f2..b868428 100644 --- a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc +++ b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc
@@ -138,7 +138,9 @@ } int CredentialLeakDialogView::GetDialogButtons() const { - return controller_->ShouldShowCancelButton() + // |controller_| can be nullptr when the framework calls this method after a + // button click. + return controller_ && controller_->ShouldShowCancelButton() ? ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL : ui::DIALOG_BUTTON_OK; } @@ -153,7 +155,9 @@ } base::string16 CredentialLeakDialogView::GetWindowTitle() const { - return controller_->GetTitle(); + // |controller_| can be nullptr when the framework calls this method after a + // button click. + return controller_ ? controller_->GetTitle() : base::string16(); } void CredentialLeakDialogView::InitWindow() {
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc index 95e3357..bcc202d 100644 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -338,6 +338,7 @@ incognito_tab_html( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( IDR_INCOGNITO_TAB_HTML)); + CHECK(*incognito_tab_html); std::string full_html = ReplaceTemplateExpressions(*incognito_tab_html, replacements); @@ -404,6 +405,7 @@ guest_tab_html( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( guest_tab_idr)); + CHECK(*guest_tab_html); ui::TemplateReplacements replacements; ui::TemplateReplacementsFromDictionaryValue(localized_strings, &replacements); std::string full_html = @@ -520,6 +522,7 @@ new_tab_html( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( IDR_NEW_TAB_4_HTML)); + CHECK(*new_tab_html); std::string full_html = webui::GetI18nTemplateHtml( base::StringPiece(reinterpret_cast<const char*>((*new_tab_html)->front()), (*new_tab_html)->size()), @@ -550,6 +553,7 @@ new_tab_theme_css( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( IDR_NEW_INCOGNITO_TAB_THEME_CSS)); + CHECK(*new_tab_theme_css); // Create the string from our template and the replacements. std::string full_css = @@ -629,6 +633,7 @@ new_tab_theme_css( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( IDR_NEW_TAB_4_THEME_CSS)); + CHECK(*new_tab_theme_css); // Create the string from our template and the replacements. std::string css_string =
diff --git a/chrome/browser/updates/update_notification_client.cc b/chrome/browser/updates/update_notification_client.cc index 25d59c6..61805c8 100644 --- a/chrome/browser/updates/update_notification_client.cc +++ b/chrome/browser/updates/update_notification_client.cc
@@ -2,20 +2,32 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/updates/update_notification_client.h" + #include <utility> -#include "chrome/browser/updates/update_notification_client.h" +#include "chrome/browser/updates/update_notification_service.h" +#include "chrome/browser/updates/update_notification_service_bridge.h" namespace updates { -UpdateNotificationClient::UpdateNotificationClient() = default; +UpdateNotificationClient::UpdateNotificationClient(GetServiceCallback callback) + : get_service_callback_(std::move(callback)) {} UpdateNotificationClient::~UpdateNotificationClient() = default; void UpdateNotificationClient::BeforeShowNotification( std::unique_ptr<NotificationData> notification_data, NotificationDataCallback callback) { - NOTIMPLEMENTED(); + auto* update_notification_service = get_service_callback_.Run(); + DCHECK(update_notification_service); + if (!update_notification_service->IsReadyToDisplay()) { + std::move(callback).Run(nullptr); + return; + } + updates::UpdateLastShownTimeStamp(base::Time::Now()); + // TODO(hesen): Record metrics, and add iHNR buttons. + std::move(callback).Run(std::move(notification_data)); } void UpdateNotificationClient::OnSchedulerInitialized(
diff --git a/chrome/browser/updates/update_notification_client.h b/chrome/browser/updates/update_notification_client.h index 84d0307..87d1782 100644 --- a/chrome/browser/updates/update_notification_client.h +++ b/chrome/browser/updates/update_notification_client.h
@@ -9,10 +9,13 @@ #include <set> #include <string> +#include "base/bind.h" #include "chrome/browser/notifications/scheduler/public/notification_scheduler_client.h" namespace updates { +class UpdateNotificationService; + // Client side code for Chrome Update notification, integrated with // notificaiton scheduler system. class UpdateNotificationClient @@ -20,8 +23,10 @@ public: using NotificationData = notifications::NotificationData; using UserActionData = notifications::UserActionData; + using GetServiceCallback = + base::RepeatingCallback<UpdateNotificationService*()>; - UpdateNotificationClient(); + explicit UpdateNotificationClient(GetServiceCallback callback); ~UpdateNotificationClient() override; private: @@ -33,6 +38,8 @@ std::set<std::string> guids) override; void OnUserAction(const UserActionData& action_data) override; + GetServiceCallback get_service_callback_; + DISALLOW_COPY_AND_ASSIGN(UpdateNotificationClient); };
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc index 41b7cd6..983114df 100644 --- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -606,14 +606,7 @@ ExpectAutomaticGenerationAvailable("first_password", kAvailable); } -// https://crbug.com/1036807. -#if defined(OS_WIN) || defined(OS_LINUX) -#define MAYBE_MaximumCharsForGenerationOffer \ - DISABLED_MaximumCharsForGenerationOffer -#else -#define MAYBE_MaximumCharsForGenerationOffer MaximumCharsForGenerationOffer -#endif -TEST_F(PasswordGenerationAgentTest, MAYBE_MaximumCharsForGenerationOffer) { +TEST_F(PasswordGenerationAgentTest, MaximumCharsForGenerationOffer) { base::HistogramTester histogram_tester; LoadHTMLWithUserGesture(kAccountCreationFormHTML); @@ -669,6 +662,7 @@ // display event is sent. EXPECT_CALL(fake_pw_client_, GenerationElementLostFocus()); LoadHTMLWithUserGesture(kSigninFormHTML); + fake_pw_client_.Flush(); histogram_tester.ExpectBucketCount( "PasswordGeneration.Event",
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 28a3cd26..d44bc77 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3270,17 +3270,6 @@ "../browser/performance_manager/mechanisms/working_set_trimmer_win_unittest.cc", "../browser/performance_manager/observers/isolation_context_metrics_unittest.cc", "../browser/performance_manager/observers/metrics_collector_unittest.cc", - "../browser/performance_manager/persistence/site_data/exponential_moving_average_unittest.cc", - "../browser/performance_manager/persistence/site_data/leveldb_site_data_store_unittest.cc", - "../browser/performance_manager/persistence/site_data/non_recording_site_data_cache_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_cache_facade_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_cache_impl_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_impl_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_reader_unittest.cc", - "../browser/performance_manager/persistence/site_data/site_data_writer_unittest.cc", - "../browser/performance_manager/persistence/site_data/unittest_utils.cc", - "../browser/performance_manager/persistence/site_data/unittest_utils.h", "../browser/performance_manager/render_process_host_proxy_unittest.cc", "../browser/performance_manager/test_support/page_aggregator.cc", "../browser/performance_manager/test_support/page_aggregator.h", @@ -3792,6 +3781,7 @@ "../browser/autofill/credit_card_accessory_controller_impl_unittest.cc", "../browser/autofill/manual_filling_controller_impl_unittest.cc", "../browser/contextmenu/chrome_context_menu_populator_unittest.cc", + "../browser/installedapp/installed_app_provider_unittest.cc", "../browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc", "../browser/metrics/chrome_android_metrics_provider_unittest.cc", "../browser/page_load_metrics/observers/android_page_load_metrics_observer_unittest.cc", @@ -3944,6 +3934,19 @@ "../browser/resource_coordinator/tracing_lifecycle_unit_observer_unittest.cc", "../browser/resource_coordinator/usage_clock_unittest.cc", + # The site data database isn't supported on Android. + "../browser/performance_manager/persistence/site_data/exponential_moving_average_unittest.cc", + "../browser/performance_manager/persistence/site_data/leveldb_site_data_store_unittest.cc", + "../browser/performance_manager/persistence/site_data/non_recording_site_data_cache_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_cache_facade_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_cache_impl_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_impl_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_reader_unittest.cc", + "../browser/performance_manager/persistence/site_data/site_data_writer_unittest.cc", + "../browser/performance_manager/persistence/site_data/unittest_utils.cc", + "../browser/performance_manager/persistence/site_data/unittest_utils.h", + # Android does not use the Message Center notification system. "../browser/notifications/notification_ui_manager_unittest.cc", "../browser/platform_util_unittest.cc", @@ -4017,6 +4020,7 @@ "../browser/ui/cookie_controls/cookie_controls_controller_unittest.cc", "../browser/ui/exclusive_access/fullscreen_controller_state_unittest.cc", "../browser/ui/extensions/extension_action_view_controller_unittest.cc", + "../browser/ui/extensions/extension_installed_waiter_unittest.cc", "../browser/ui/extensions/extension_message_bubble_bridge_unittest.cc", "../browser/ui/global_error/global_error_service_unittest.cc", "../browser/ui/global_media_controls/cast_media_notification_item_unittest.cc",
diff --git a/chrome/test/data/extensions/theme/Cached Theme.pak b/chrome/test/data/extensions/theme/Cached Theme.pak index 405498f8c..93732d5 100644 --- a/chrome/test/data/extensions/theme/Cached Theme.pak +++ b/chrome/test/data/extensions/theme/Cached Theme.pak Binary files differ
diff --git a/chrome/test/data/webui/new_tab_page/theme_icon_test.js b/chrome/test/data/webui/new_tab_page/theme_icon_test.js index 68e1c0c..edcf864 100644 --- a/chrome/test/data/webui/new_tab_page/theme_icon_test.js +++ b/chrome/test/data/webui/new_tab_page/theme_icon_test.js
@@ -63,11 +63,12 @@ queryAll('#gradient > stop')[1], 'stop-color', 'rgb(255, 0, 0)'); }); - test('selecting icon shows ring', async () => { + test('selecting icon shows ring and check mark', async () => { // Act. themeIcon.setAttribute('selected', true); // Assert. assertStyle(query('#ring'), 'visibility', 'visible'); + assertStyle(query('#checkMark'), 'visibility', 'visible'); }); });
diff --git a/chrome/tools/build/mac/FILES.cfg b/chrome/tools/build/mac/FILES.cfg index 91654c3..2089a89e 100644 --- a/chrome/tools/build/mac/FILES.cfg +++ b/chrome/tools/build/mac/FILES.cfg
@@ -129,9 +129,4 @@ 'buildtype': ['dev', 'official'], 'archive': 'devtools-frontend.zip', }, - # Updater files: - { - 'filename': 'GoogleUpdate.app', - 'buildtype': ['official'], - } ]
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn index a43acc6..5cea2c2d9 100644 --- a/chromecast/BUILD.gn +++ b/chromecast/BUILD.gn
@@ -583,7 +583,6 @@ "DISABLE_SECURE_FLAC_OPUS_DECODING=$disable_secure_flac_and_opus_decoding", "ENABLE_ASSISTANT=$enable_assistant", "ENABLE_CAST_FRAGMENT=$enable_cast_fragment", - "ENABLE_CAST_WAYLAND_SERVER=$enable_cast_wayland_server", "ENABLE_CHROMECAST_EXTENSIONS=$enable_chromecast_extensions", "ENABLE_EXTERNAL_MOJO_SERVICES=$enable_external_mojo_services", "ENABLE_PLAYREADY=$enable_playready",
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn index 5f38a408..3ef8091c 100644 --- a/chromecast/browser/BUILD.gn +++ b/chromecast/browser/BUILD.gn
@@ -397,7 +397,7 @@ ] } - if (enable_cast_wayland_server) { + if (is_linux && use_ozone) { sources += [ "exo/cast_wm_helper.cc", "exo/cast_wm_helper.h",
diff --git a/chromecast/browser/android/apk/res-values/values/strings.xml b/chromecast/browser/android/apk/res-values/values/strings.xml index 6e01b910..d9650e3 100644 --- a/chromecast/browser/android/apk/res-values/values/strings.xml +++ b/chromecast/browser/android/apk/res-values/values/strings.xml
@@ -8,6 +8,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation,UnusedResources"> - <string name="app_name">Chromecast Android Shell</string> + <string name="app_name">Chromecast built-in</string> <string name="browser_process_initialization_failed">Initialization failed.</string> </resources>
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index 81b9466..51dcf9b 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -123,7 +123,7 @@ #include "extensions/browser/extension_prefs.h" // nogncheck #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) #include "chromecast/browser/exo/wayland_server_controller.h" #endif @@ -629,7 +629,7 @@ cast_browser_process_->browser_context()); #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) wayland_server_controller_ = std::make_unique<WaylandServerController>(window_manager_.get()); #endif @@ -712,7 +712,7 @@ } void CastBrowserMainParts::PostMainMessageLoopRun() { -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) wayland_server_controller_.reset(); #endif #if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
diff --git a/chromecast/browser/cast_browser_main_parts.h b/chromecast/browser/cast_browser_main_parts.h index e952f22..4480a46e 100644 --- a/chromecast/browser/cast_browser_main_parts.h +++ b/chromecast/browser/cast_browser_main_parts.h
@@ -130,7 +130,7 @@ std::unique_ptr<PrefService> user_pref_service_; #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) std::unique_ptr<WaylandServerController> wayland_server_controller_; #endif
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc index aff2572..fa721ffc 100644 --- a/chromecast/browser/cast_content_browser_client.cc +++ b/chromecast/browser/cast_content_browser_client.cc
@@ -126,9 +126,9 @@ #include "chromecast/external_mojo/broker_service/broker_service.h" #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) #include "chromecast/browser/webview/webview_controller.h" -#endif // BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#endif // defined(OS_LINUX) && defined(USE_OZONE) #if BUILDFLAG(ENABLE_CAST_RENDERER) #include "base/sequenced_task_runner.h" @@ -811,12 +811,12 @@ handle, general_audience_browsing_service_.get())); } -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) auto webview_throttle = WebviewController::MaybeGetNavigationThrottle(handle); if (webview_throttle) { throttles.push_back(std::move(webview_throttle)); } -#endif // BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#endif // defined(OS_LINUX) && defined(USE_OZONE) return throttles; }
diff --git a/chromecast/browser/cast_content_browser_client_receiver_bindings.cc b/chromecast/browser/cast_content_browser_client_receiver_bindings.cc index e82f43d..23e002ad 100644 --- a/chromecast/browser/cast_content_browser_client_receiver_bindings.cc +++ b/chromecast/browser/cast_content_browser_client_receiver_bindings.cc
@@ -36,7 +36,7 @@ #include "chromecast/external_mojo/broker_service/broker_service.h" #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) #include "chromecast/browser/webview/js_channel_service.h" #include "chromecast/common/mojom/js_channel.mojom.h" #endif @@ -232,7 +232,7 @@ void CastContentBrowserClient::BindHostReceiverForRenderer( content::RenderProcessHost* render_process_host, mojo::GenericPendingReceiver receiver) { -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) if (auto r = receiver.As<::chromecast::mojom::JsChannelBindingProvider>()) { JsChannelService::Create(render_process_host, std::move(r), base::ThreadTaskRunnerHandle::Get());
diff --git a/chromecast/chromecast.gni b/chromecast/chromecast.gni index faa8dff..1cf5f4d 100644 --- a/chromecast/chromecast.gni +++ b/chromecast/chromecast.gni
@@ -104,9 +104,6 @@ # cast CMA media backend and supporting Widevine or Playready. disable_secure_flac_and_opus_decoding = false - # Set to true to enable wayland server - enable_cast_wayland_server = false - # Set to true to enable mixing in CastAudioManager. Only needed on devices # that do not have a mixer in the CMA backend. enable_cast_audio_manager_mixer =
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc index 4a050b9..45941c2 100644 --- a/chromecast/renderer/cast_content_renderer_client.cc +++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -192,7 +192,7 @@ dispatcher->OnRenderFrameCreated(render_frame); #endif -#if BUILDFLAG(ENABLE_CAST_WAYLAND_SERVER) +#if defined(OS_LINUX) && defined(USE_OZONE) // JsChannelBindings destroys itself when the RenderFrame is destroyed. JsChannelBindings::Create(render_frame); #endif
diff --git a/chromeos/printing/printer_translator.h b/chromeos/printing/printer_translator.h index 6803752..e81ea83 100644 --- a/chromeos/printing/printer_translator.h +++ b/chromeos/printing/printer_translator.h
@@ -19,7 +19,7 @@ CHROMEOS_EXPORT extern const char kPrinterId[]; // Returns a new printer populated with the fields from |pref|. Processes -// dictionaries from policy i.e. cPanel. +// dictionaries from policy. CHROMEOS_EXPORT std::unique_ptr<Printer> RecommendedPrinterToPrinter( const base::DictionaryValue& pref);
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 1769c9d..df59239 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -34,8 +34,6 @@ "intent_helper/arc_intent_helper_observer.h", "intent_helper/control_camera_app_delegate.h", "intent_helper/factory_reset_delegate.h", - "intent_helper/font_size_util.cc", - "intent_helper/font_size_util.h", "intent_helper/intent_constants.cc", "intent_helper/intent_constants.h", "intent_helper/intent_filter.cc", @@ -371,7 +369,6 @@ "ime/arc_ime_service_unittest.cc", "intent_helper/activity_icon_loader_unittest.cc", "intent_helper/arc_intent_helper_bridge_unittest.cc", - "intent_helper/font_size_util_unittest.cc", "intent_helper/intent_filter_unittest.cc", "intent_helper/link_handler_model_unittest.cc", "metrics/arc_metrics_service_unittest.cc",
diff --git a/components/arc/intent_helper/font_size_util.cc b/components/arc/intent_helper/font_size_util.cc deleted file mode 100644 index 968db7d..0000000 --- a/components/arc/intent_helper/font_size_util.cc +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/arc/intent_helper/font_size_util.h" - -#include <algorithm> - -namespace arc { - -double ConvertFontSizeChromeToAndroid(int default_size, - int default_fixed_size, - int minimum_size) { - // kWebKitDefaultFixedFontSize is automatically set to be 3 pixels smaller - // than kWebKitDefaultFontSize when Chrome's settings page's main font - // dropdown control is adjusted. If the user specifically sets a higher - // fixed font size we will want to take into account the adjustment. - default_fixed_size += 3; - int max_chrome_size = - std::max({default_fixed_size, default_size, minimum_size}); - - double android_scale = kAndroidFontScaleSmall; - if (max_chrome_size >= kChromeFontSizeVeryLarge) { - android_scale = kAndroidFontScaleHuge; - } else if (max_chrome_size >= kChromeFontSizeLarge) { - android_scale = kAndroidFontScaleLarge; - } else if (max_chrome_size >= kChromeFontSizeNormal) { - android_scale = kAndroidFontScaleNormal; - } - - return android_scale; -} - -} // namespace arc
diff --git a/components/arc/intent_helper/font_size_util.h b/components/arc/intent_helper/font_size_util.h deleted file mode 100644 index e7cc9ef..0000000 --- a/components/arc/intent_helper/font_size_util.h +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_ARC_INTENT_HELPER_FONT_SIZE_UTIL_H_ -#define COMPONENTS_ARC_INTENT_HELPER_FONT_SIZE_UTIL_H_ - -namespace arc { - -// The following values were obtained from chrome://settings and Android's -// Display settings on Nov 2015. They are expected to remain stable. -const float kAndroidFontScaleSmall = 0.85; -const float kAndroidFontScaleNormal = 1; -const float kAndroidFontScaleLarge = 1.15; -const float kAndroidFontScaleHuge = 1.3; -const int kChromeFontSizeNormal = 16; -const int kChromeFontSizeLarge = 20; -const int kChromeFontSizeVeryLarge = 24; - -// Android has only a single float value for system-wide font size -// (font_scale). Chrome has three main int pixel values that affect -// system-wide font size. We will take the largest font value of the three -// main font values on Chrome and convert to an Android size. -double ConvertFontSizeChromeToAndroid(int default_size, - int default_fixed_size, - int minimum_size); - -} // namespace arc - -#endif // COMPONENTS_ARC_INTENT_HELPER_FONT_SIZE_UTIL_H_
diff --git a/components/arc/intent_helper/font_size_util_unittest.cc b/components/arc/intent_helper/font_size_util_unittest.cc deleted file mode 100644 index 31cbd60d..0000000 --- a/components/arc/intent_helper/font_size_util_unittest.cc +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/arc/intent_helper/font_size_util.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace arc { - -TEST(ArcSettingsServiceTest, FontSizeConvertChromeToAndroid) { - // Does not return a value smaller than Small. - EXPECT_DOUBLE_EQ(kAndroidFontScaleSmall, - ConvertFontSizeChromeToAndroid(0, 0, 0)); - - // Does not return a value larger than Huge - EXPECT_DOUBLE_EQ(kAndroidFontScaleHuge, - ConvertFontSizeChromeToAndroid(100, 100, 100)); - - // The max of any Chrome values is what determines the Android value. - EXPECT_DOUBLE_EQ(kAndroidFontScaleLarge, - ConvertFontSizeChromeToAndroid(20, 0, 0)); - EXPECT_DOUBLE_EQ(kAndroidFontScaleLarge, - ConvertFontSizeChromeToAndroid(0, 20, 0)); - EXPECT_DOUBLE_EQ(kAndroidFontScaleLarge, - ConvertFontSizeChromeToAndroid(0, 0, 20)); - - // default fixed font size is adjusted up three pixels - EXPECT_DOUBLE_EQ(kAndroidFontScaleLarge, - ConvertFontSizeChromeToAndroid(0, 17, 0)); - - // Small converts properly. - EXPECT_DOUBLE_EQ(kAndroidFontScaleSmall, - ConvertFontSizeChromeToAndroid(12, 0, 0)); - - // Normal converts properly. - EXPECT_DOUBLE_EQ(kAndroidFontScaleNormal, - ConvertFontSizeChromeToAndroid(16, 0, 0)); - - // Large converts properly. - EXPECT_DOUBLE_EQ(kAndroidFontScaleLarge, - ConvertFontSizeChromeToAndroid(20, 0, 0)); - - // Very large converts properly. - EXPECT_DOUBLE_EQ(kAndroidFontScaleHuge, - ConvertFontSizeChromeToAndroid(24, 0, 0)); -} - -} // namespace arc
diff --git a/components/arc/mojom/file_system.mojom b/components/arc/mojom/file_system.mojom index 16f0b9a..4c3176e 100644 --- a/components/arc/mojom/file_system.mojom +++ b/components/arc/mojom/file_system.mojom
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Next MinVersion: 14 +// Next MinVersion: 15 module arc.mojom; @@ -278,7 +278,7 @@ (FileSelectorElements elements); }; -// Next method ID: 19 +// Next method ID: 21 interface FileSystemInstance { // Notes about Android Documents Provider: // @@ -409,6 +409,13 @@ // MediaProvider is removed. RequestMediaScan@0(array<string> paths); + // Reloads and refreshes entries in MediaStore under |directory_path|. + [MinVersion=14] ReindexDirectory@19(string directory_path); + + // Searches for the removed files/directories under the given + // |directory_paths| (non-recursively) in MediaStore and removes them. + [MinVersion=14] RequestFileRemovalScan@20(array<string> directory_paths); + // Opens URLs by sending an intent to the specified activity. // Since this grants read/write URL permissions to the activity, callers must // ensure that the user is correctly aware of the URLs and the activity they
diff --git a/components/arc/test/fake_file_system_instance.cc b/components/arc/test/fake_file_system_instance.cc index ef07647..0ff365df 100644 --- a/components/arc/test/fake_file_system_instance.cc +++ b/components/arc/test/fake_file_system_instance.cc
@@ -62,6 +62,8 @@ } // namespace +constexpr base::FilePath::CharType FakeFileSystemInstance::kFakeAndroidPath[]; + FakeFileSystemInstance::File::File(const std::string& url, const std::string& content, const std::string& mime_type, @@ -174,6 +176,23 @@ roots_.push_back(root); } +void FakeFileSystemInstance::SetGetLastChangeTimeCallback( + GetLastChangeTimeCallback ctime_callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + ctime_callback_ = ctime_callback; +} + +void FakeFileSystemInstance::SetCrosDir(const base::FilePath& cros_dir) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + cros_dir_ = cros_dir; +} + +void FakeFileSystemInstance::SetMediaStore( + const std::map<base::FilePath, base::Time>& media_store) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + media_store_ = media_store; +} + void FakeFileSystemInstance::TriggerWatchers( const std::string& authority, const std::string& document_id, @@ -555,10 +574,65 @@ FROM_HERE, base::BindOnce(std::move(callback), true)); } +// TODO(risan): "Added" directory might not be handled. Please double check +// this. void FakeFileSystemInstance::RequestMediaScan( const std::vector<std::string>& paths) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - // Do nothing and pretend we scaned them. + // TODO(risan): This is to prevent crashing other tests that expect nothing + // from RequestMediaScan, e.g., the following: + // FilesAppBrowserTest.Test/dirContextMenuDocumentsProvider_DocumentsProvider + if (cros_dir_.empty()) + return; + for (const auto& path : paths) { + base::FilePath file_path = base::FilePath(path); + base::FilePath cros_path = GetCrosPath(file_path); + if (PathExists(cros_path)) { + // For each existing path, index itself and all parent directories of + // it. + base::Time ctime; + if (!DirectoryExists(cros_path)) + ctime = ctime_callback_.Run(cros_path); + media_store_[file_path] = ctime; + file_path = file_path.DirName(); + while (file_path != base::FilePath(kFakeAndroidPath).DirName()) { + media_store_[file_path] = base::Time(); + file_path = file_path.DirName(); + } + } else { + // When a file or directory does not exist, it means it has been + // deleted. So we need to erase its index entry in |media_store_|, and + // also the entries of all files/directories underneath it if it is a + // directory. + for (auto it = media_store_.begin(); it != media_store_.end();) { + if (it->first == file_path || file_path.IsParent(it->first)) + media_store_.erase(it++); + else + ++it; + } + } + } +} + +void FakeFileSystemInstance::RequestFileRemovalScan( + const std::vector<std::string>& directory_paths) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + ReindexDirectory(kFakeAndroidPath); +} + +void FakeFileSystemInstance::ReindexDirectory( + const std::string& directory_path) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + std::vector<std::string> paths = {directory_path}; + base::FilePath directory_file_path(directory_path); + for (const auto& entry : media_store_) { + base::FilePath entry_path = entry.first; + if (!directory_file_path.IsParent(entry_path)) { + continue; + } + paths.push_back(entry_path.value()); + } + RequestMediaScan(paths); } void FakeFileSystemInstance::OpenUrlsWithPermission( @@ -637,4 +711,12 @@ return fd_write; } +base::FilePath FakeFileSystemInstance::GetCrosPath( + const base::FilePath& android_path) const { + base::FilePath cros_path(cros_dir_); + base::FilePath android_dir(kFakeAndroidPath); + android_dir.AppendRelativePath(android_path, &cros_path); + return cros_path; +} + } // namespace arc
diff --git a/components/arc/test/fake_file_system_instance.h b/components/arc/test/fake_file_system_instance.h index 9031bb5..c40dbf3 100644 --- a/components/arc/test/fake_file_system_instance.h +++ b/components/arc/test/fake_file_system_instance.h
@@ -54,6 +54,15 @@ class FakeFileSystemInstance : public mojom::FileSystemInstance { public: // Specification of a fake file available to content URL based methods. + using GetLastChangeTimeCallback = + base::RepeatingCallback<base::Time(const base::FilePath& path)>; + + // TODO(risan): Consider if this is really needed, and whether we should just + // use the simpler option by using the original directory as is. + // The path for the top level directory considered in MediaStore. + static constexpr base::FilePath::CharType kFakeAndroidPath[] = + FILE_PATH_LITERAL("/android/path"); + struct File { enum class Seekable { NO, @@ -181,6 +190,20 @@ // Adds a root accessible by document provider based methods. void AddRoot(const Root& root); + // Fake the GetLastChangedTime implementation. + void SetGetLastChangeTimeCallback(GetLastChangeTimeCallback ctime_callback); + + // Sets the path for the top level cros directory considered in MediaStore. + // TODO(risan): Consider to not use this (if we go without different android + // path approach). Another possibility to consider is probably to bind mount + // the directory in the caller test and do android_path conversion for the + // caller? In any case, this we don't want cros to be exposed to this instance + // that lives under Android. + void SetCrosDir(const base::FilePath& cros_dir); + + // Sets the initial media store content. + void SetMediaStore(const std::map<base::FilePath, base::Time>& media_store); + // Triggers watchers installed to a document. void TriggerWatchers(const std::string& authority, const std::string& document_id, @@ -225,6 +248,11 @@ return handled_url_requests_; } + // Returns the content of the fake media store index. + const std::map<base::FilePath, base::Time>& GetMediaStore() const { + return media_store_; + } + // mojom::FileSystemInstance: void AddWatcher(const std::string& authority, const std::string& document_id, @@ -273,6 +301,9 @@ void RemoveWatcher(int64_t watcher_id, RemoveWatcherCallback callback) override; void RequestMediaScan(const std::vector<std::string>& paths) override; + void RequestFileRemovalScan( + const std::vector<std::string>& directory_paths) override; + void ReindexDirectory(const std::string& directory_path) override; void OpenUrlsWithPermission(mojom::OpenUrlsRequestPtr request, OpenUrlsWithPermissionCallback callback) override; @@ -302,6 +333,9 @@ // read by calling GetFileContent() with the passed |url|. base::ScopedFD CreateStreamFileDescriptorToWrite(const std::string& url); + // Returns the cros file path for |android_path|. + base::FilePath GetCrosPath(const base::FilePath& android_path) const; + THREAD_CHECKER(thread_checker_); base::ScopedTempDir temp_dir_; @@ -340,6 +374,15 @@ // List of roots added by AddRoot(). std::vector<Root> roots_; + // Fake MediaStore database index. + std::map<base::FilePath, base::Time> media_store_; + + // Fake GetLastChangedTime function callback. + GetLastChangeTimeCallback ctime_callback_; + + // The path for the top level cros directory considered in MediaStore. + base::FilePath cros_dir_; + int64_t next_watcher_id_ = 1; int get_child_documents_count_ = 0;
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 218da39..019f3fbe 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -77,7 +77,8 @@ kNotMigrated = 0, kMigratedFromCanonicalEmail = 1, kMigratedFromNonCanonicalEmail = 2, - kMaxValue = kMigratedFromNonCanonicalEmail, + kNotMigratedUnexpectedPrimaryAccountIdWithEmail = 3, + kMaxValue = kNotMigratedUnexpectedPrimaryAccountIdWithEmail, }; template <typename T> @@ -2531,7 +2532,15 @@ // When migration is started or done, the primary account is created from a // Gaia ID. - DCHECK(!primary_account_id.IsEmail()); + if (primary_account_id.IsEmail()) { + DLOG(ERROR) << "Unexpected primary account id from an email [" + << primary_account_id << "]."; + base::UmaHistogramEnumeration( + "Autofill.MigrateUserOptedInToWalletSync", + MigrateUserOptedInWalletSyncType:: + kNotMigratedUnexpectedPrimaryAccountIdWithEmail); + return; + } CoreAccountId legacy_account_id_from_email = CoreAccountId::FromEmail(gaia::CanonicalizeEmail(primary_account.email));
diff --git a/components/exo/BUILD.gn b/components/exo/BUILD.gn index 9704c816..618d3b6 100644 --- a/components/exo/BUILD.gn +++ b/components/exo/BUILD.gn
@@ -254,6 +254,7 @@ "//ash:test_support", "//ash/keyboard/ui", "//ash/public/cpp", + "//chromeos/constants", ] }
diff --git a/components/exo/pointer.cc b/components/exo/pointer.cc index 01f0dcf..fd4460a 100644 --- a/components/exo/pointer.cc +++ b/components/exo/pointer.cc
@@ -262,24 +262,20 @@ if (!capture_window_) return; - auto* capture_client = WMHelper::GetInstance()->GetCaptureClient(); - capture_client->RemoveObserver(this); - if (capture_window_ && capture_window_->HasCapture()) - capture_client->ReleaseCapture(capture_window_); - capture_window_ = nullptr; + // Remove the pre-target handler that consumes all mouse events. + aura::Env::GetInstance()->RemovePreTargetHandler(this); auto* cursor_client = WMHelper::GetInstance()->GetCursorClient(); cursor_client->UnlockCursor(); cursor_client->ShowCursor(); - aura::Window* focusedWindow = WMHelper::GetInstance()->GetFocusedWindow(); - aura::Window* root = focusedWindow->GetRootWindow(); + aura::Window* root = capture_window_->GetRootWindow(); gfx::Point p = location_when_pointer_capture_enabled_ ? *location_when_pointer_capture_enabled_ : root->bounds().CenterPoint(); root->MoveCursorTo(p); - focus_surface_ = nullptr; + capture_window_ = nullptr; location_when_pointer_capture_enabled_.reset(); UpdateCursor(); } @@ -312,15 +308,24 @@ if (!base::FeatureList::IsEnabled(kPointerCapture)) return false; + if (capture_surface->window() != + WMHelper::GetInstance()->GetFocusedWindow()) { + LOG(ERROR) + << "Cannot enable pointer capture on a window that is not focused."; + return false; + } + if (!capture_surface->HasSurfaceObserver(this)) capture_surface->AddSurfaceObserver(this); capture_window_ = capture_surface->window(); - auto* capture_client = WMHelper::GetInstance()->GetCaptureClient(); - capture_client->SetCapture(capture_window_); - capture_client->AddObserver(this); + // Add a pre-target handler that can consume all mouse events before it gets + // sent to other targets. + aura::Env::GetInstance()->AddPreTargetHandler( + this, ui::EventTarget::Priority::kSystem); + // TODO(b/146082565): Do not hide cursor when enabling pointer capture. auto* cursor_client = WMHelper::GetInstance()->GetCursorClient(); cursor_client->HideCursor(); cursor_client->LockCursor(); @@ -354,6 +359,8 @@ pointer_constraint_delegate_->OnConstraintBroken(); UnconstrainPointer(); } + if (surface && surface->window() == capture_window_) + DisablePointerCapture(); if (surface == focus_surface_) { SetFocus(nullptr, gfx::PointF(), 0); return; @@ -388,8 +395,7 @@ TRACE_EXO_INPUT_EVENT(event); - if (event->IsMouseEvent() && event->type() != ui::ET_MOUSE_EXITED && - event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { + if (event->IsMouseEvent() && event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { // Generate motion event if location changed. We need to check location // here as mouse movement can generate both "moved" and "entered" events // but OnPointerMotion should only be called if location changed since @@ -402,16 +408,18 @@ : gfx::ToFlooredPoint(location_in_root) == gfx::ToFlooredPoint(location_); if (!same_location) { - if (relative_pointer_delegate_) - HandleRelativePointerMotion(event->time_stamp(), location_in_root); + bool needs_frame = + HandleRelativePointerMotion(event->time_stamp(), location_in_root); if (capture_window_) { if (ShouldMoveToCenter()) MoveCursorToCenterOfActiveDisplay(); - } else { + } else if (event->type() != ui::ET_MOUSE_EXITED) { delegate_->OnPointerMotion(event->time_stamp(), location_in_target); + needs_frame = true; } + if (needs_frame) + delegate_->OnPointerFrame(); location_ = location_in_root; - delegate_->OnPointerFrame(); } } switch (event->type()) { @@ -481,6 +489,12 @@ } last_event_type_ = event->type(); + + // Consume all mouse events when pointer capture is enabled. + if (capture_window_) { + event->SetHandled(); + event->StopPropagation(); + } } void Pointer::OnScrollEvent(ui::ScrollEvent* event) { @@ -517,16 +531,12 @@ default: break; } -} -//////////////////////////////////////////////////////////////////////////////// -// aura::client::CaptureClientObserver overrides: - -void Pointer::OnCaptureChanged(aura::Window* lost_capture, - aura::Window* gained_capture) { - // Note: This observer is only set when pointer capture in enabled. - if (capture_window_ && gained_capture != capture_window_) - DisablePointerCapture(); + // Consume all mouse events when pointer capture is enabled. + if (capture_window_) { + event->SetHandled(); + event->StopPropagation(); + } } //////////////////////////////////////////////////////////////////////////////// @@ -565,14 +575,23 @@ void Pointer::OnWindowFocused(aura::Window* gained_focus, aura::Window* lost_focus) { - if (capture_window_) - DisablePointerCapture(); + if (capture_window_ && capture_window_ != gained_focus) { + if (pointer_constraint_delegate_) { + pointer_constraint_delegate_->OnConstraintBroken(); + UnconstrainPointer(); + } else { + DisablePointerCapture(); + } + } } //////////////////////////////////////////////////////////////////////////////// // Pointer, private: Surface* Pointer::GetEffectiveTargetForEvent(ui::LocatedEvent* event) const { + if (capture_window_) + return Surface::AsSurface(capture_window_); + Surface* target = GetTargetSurfaceForLocatedEvent(event); if (!target) @@ -598,7 +617,8 @@ delegate_->OnPointerEnter(surface, location, button_flags); location_ = GetLocationInRoot(surface, location); focus_surface_ = surface; - focus_surface_->AddSurfaceObserver(this); + if (!focus_surface_->HasSurfaceObserver(this)) + focus_surface_->AddSurfaceObserver(this); } delegate_->OnPointerFrame(); UpdateCursor(); @@ -744,27 +764,28 @@ } bool Pointer::ShouldMoveToCenter() { - // Early out if the pointer doesn't have a surface in focus. - if (!focus_surface_) + if (!capture_window_) return false; - gfx::Rect rect = - WMHelper::GetInstance()->GetFocusedWindow()->GetRootWindow()->bounds(); - + gfx::Rect rect = capture_window_->GetRootWindow()->bounds(); rect.Inset(rect.width() / 6, rect.height() / 6); return !rect.Contains(location_.x(), location_.y()); } void Pointer::MoveCursorToCenterOfActiveDisplay() { - aura::Window* focusedWindow = WMHelper::GetInstance()->GetFocusedWindow(); - aura::Window* root = focusedWindow->GetRootWindow(); + if (!capture_window_) + return; + aura::Window* root = capture_window_->GetRootWindow(); gfx::Point p = root->bounds().CenterPoint(); location_synthetic_move_ = p; root->MoveCursorTo(p); } -void Pointer::HandleRelativePointerMotion(base::TimeTicks time_stamp, +bool Pointer::HandleRelativePointerMotion(base::TimeTicks time_stamp, gfx::PointF location_in_root) { + if (!relative_pointer_delegate_) + return false; + if (location_synthetic_move_) { gfx::Point synthetic = *location_synthetic_move_; // Since MoveCursorTo() takes integer coordinates, the resulting move could @@ -774,13 +795,14 @@ // This was a synthetic move event, so do not forward it and clear the // synthetic move. location_synthetic_move_.reset(); - return; + return false; } } gfx::PointF delta(location_in_root.x() - location_.x(), location_in_root.y() - location_.y()); relative_pointer_delegate_->OnPointerRelativeMotion(time_stamp, delta); + return true; } } // namespace exo
diff --git a/components/exo/pointer.h b/components/exo/pointer.h index 6d78386..0478501 100644 --- a/components/exo/pointer.h +++ b/components/exo/pointer.h
@@ -15,7 +15,6 @@ #include "components/exo/surface_tree_host.h" #include "components/exo/wm_helper.h" #include "third_party/skia/include/core/SkBitmap.h" -#include "ui/aura/client/capture_client_observer.h" #include "ui/aura/client/cursor_client_observer.h" #include "ui/aura/client/focus_change_observer.h" #include "ui/base/cursor/cursor.h" @@ -48,7 +47,6 @@ class Pointer : public SurfaceTreeHost, public SurfaceObserver, public ui::EventHandler, - public aura::client::CaptureClientObserver, public aura::client::CursorClientObserver, public aura::client::FocusChangeObserver { public: @@ -82,10 +80,6 @@ void OnScrollEvent(ui::ScrollEvent* event) override; void OnGestureEvent(ui::GestureEvent* event) override; - // Overridden from aura::client::CaptureClientObserver: - void OnCaptureChanged(aura::Window* lost_capture, - aura::Window* gained_capture) override; - // Overridden from aura::client::CursorClientObserver: void OnCursorSizeChanged(ui::CursorSize cursor_size) override; void OnCursorDisplayChanged(const display::Display& display) override; @@ -161,8 +155,9 @@ // Moves the cursor to center of the active display. void MoveCursorToCenterOfActiveDisplay(); - // Process the delta for relative pointer motion. - void HandleRelativePointerMotion(base::TimeTicks time_stamp, + // Process the delta for relative pointer motion. Returns true if relative + // motion was sent to the delegate, false otherwise. + bool HandleRelativePointerMotion(base::TimeTicks time_stamp, gfx::PointF location_in_target); // The delegate instance that all events are dispatched to. @@ -192,7 +187,7 @@ // location of a generated move that was sent which should not be forwarded. base::Optional<gfx::Point> location_synthetic_move_; - // The window with input capture. Pointer capture is enabled if and only if + // The window with pointer capture. Pointer capture is enabled if and only if // this is not null. aura::Window* capture_window_ = nullptr;
diff --git a/components/exo/pointer_unittest.cc b/components/exo/pointer_unittest.cc index a45bab8..54ff8be 100644 --- a/components/exo/pointer_unittest.cc +++ b/components/exo/pointer_unittest.cc
@@ -10,10 +10,13 @@ #include "ash/wm/window_positioning_utils.h" #include "base/bind.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" #include "components/exo/buffer.h" #include "components/exo/data_source.h" #include "components/exo/data_source_delegate.h" +#include "components/exo/pointer_constraint_delegate.h" #include "components/exo/pointer_delegate.h" +#include "components/exo/relative_pointer_delegate.h" #include "components/exo/seat.h" #include "components/exo/shell_surface.h" #include "components/exo/sub_surface.h" @@ -25,10 +28,15 @@ #include "components/viz/service/surfaces/surface_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "ui/aura/client/cursor_client.h" +#include "ui/aura/client/focus_client.h" #include "ui/events/event_utils.h" #include "ui/events/test/event_generator.h" #include "ui/views/widget/widget.h" +#if defined(OS_CHROMEOS) +#include "chromeos/constants/chromeos_features.h" +#endif + namespace exo { namespace { @@ -49,6 +57,27 @@ MOCK_METHOD0(OnPointerFrame, void()); }; +class MockRelativePointerDelegate : public RelativePointerDelegate { + public: + MockRelativePointerDelegate() = default; + ~MockRelativePointerDelegate() = default; + + // Overridden from RelativePointerDelegate: + MOCK_METHOD1(OnPointerDestroying, void(Pointer*)); + MOCK_METHOD2(OnPointerRelativeMotion, + void(base::TimeTicks, const gfx::PointF&)); +}; + +class MockPointerConstraintDelegate : public PointerConstraintDelegate { + public: + MockPointerConstraintDelegate() = default; + ~MockPointerConstraintDelegate() = default; + + // Overridden from PointerConstraintDelegate: + MOCK_METHOD0(OnConstraintBroken, void()); + MOCK_METHOD0(GetConstrainedSurface, Surface*()); +}; + class TestDataSourceDelegate : public DataSourceDelegate { public: TestDataSourceDelegate() {} @@ -921,5 +950,321 @@ pointer.reset(); } +TEST_F(PointerTest, OnPointerRelativeMotion) { + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + gfx::Size buffer_size(10, 10); + std::unique_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); + surface->Attach(buffer.get()); + surface->Commit(); + + MockPointerDelegate delegate; + MockRelativePointerDelegate relative_delegate; + Seat seat; + auto pointer = std::make_unique<Pointer>(&delegate, &seat); + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); + pointer->RegisterRelativePointerDelegate(&relative_delegate); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get())) + .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(delegate, OnPointerFrame()).Times(9); + + EXPECT_CALL(delegate, OnPointerEnter(surface.get(), gfx::PointF(), 0)); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerMotion(testing::_, gfx::PointF(1, 1))); + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(1, 1))); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(1, 1)); + + EXPECT_CALL(delegate, OnPointerMotion(testing::_, gfx::PointF(2, 2))); + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(1, 1))); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(2, 2)); + + auto sub_surface = std::make_unique<Surface>(); + auto sub = std::make_unique<SubSurface>(sub_surface.get(), surface.get()); + surface->SetSubSurfacePosition(sub_surface.get(), gfx::Point(5, 5)); + gfx::Size sub_buffer_size(5, 5); + auto sub_buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(sub_buffer_size)); + sub_surface->Attach(sub_buffer.get()); + sub_surface->Commit(); + surface->Commit(); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(sub_surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(delegate, OnPointerLeave(surface.get())); + EXPECT_CALL(delegate, OnPointerEnter(sub_surface.get(), gfx::PointF(), 0)); + // OnPointerMotion will not be called, because the pointer location is already + // sent with OnPointerEnter, but we should still receive + // OnPointerRelativeMotion. + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(3, 3))); + generator.MoveMouseTo(sub_surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerMotion(testing::_, gfx::PointF(1, 1))); + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(1, 1))); + generator.MoveMouseTo(sub_surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(1, 1)); + + const gfx::Point child_surface_origin = + sub_surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(10, 10); + auto child_surface = std::make_unique<Surface>(); + auto child_shell_surface = std::make_unique<ShellSurface>( + child_surface.get(), child_surface_origin, true, false, + ash::desks_util::GetActiveDeskContainerId()); + child_shell_surface->DisableMovement(); + child_shell_surface->SetParent(shell_surface.get()); + gfx::Size child_buffer_size(15, 15); + auto child_buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(child_buffer_size)); + child_surface->Attach(child_buffer.get()); + child_surface->Commit(); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(child_surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(delegate, OnPointerLeave(sub_surface.get())); + EXPECT_CALL(delegate, OnPointerEnter(child_surface.get(), gfx::PointF(), 0)); + // OnPointerMotion will not be called, because the pointer location is already + // sent with OnPointerEnter, but we should still receive + // OnPointerRelativeMotion. + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(9, 9))); + generator.MoveMouseTo(child_surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerMotion(testing::_, gfx::PointF(10, 10))); + EXPECT_CALL(relative_delegate, + OnPointerRelativeMotion(testing::_, gfx::PointF(10, 10))); + generator.MoveMouseTo(child_surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(10, 10)); + + EXPECT_CALL(delegate, OnPointerDestroying(pointer.get())); + EXPECT_CALL(relative_delegate, OnPointerDestroying(pointer.get())); + pointer.reset(); +} + +#if defined(OS_CHROMEOS) +TEST_F(PointerTest, ConstrainPointer) { + auto scoped_feature_list = std::make_unique<base::test::ScopedFeatureList>(); + scoped_feature_list->InitAndEnableFeature( + chromeos::features::kExoPointerLock); + + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + gfx::Size buffer_size(10, 10); + auto buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); + surface->Attach(buffer.get()); + surface->Commit(); + + MockPointerDelegate delegate; + MockPointerConstraintDelegate constraint_delegate; + Seat seat; + auto pointer = std::make_unique<Pointer>(&delegate, &seat); + aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()) + ->FocusWindow(surface->window()); + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(constraint_delegate, GetConstrainedSurface()) + .WillRepeatedly(testing::Return(surface.get())); + EXPECT_TRUE(pointer->ConstrainPointer(&constraint_delegate)); + + EXPECT_CALL(delegate, OnPointerEnter(surface.get(), gfx::PointF(), 0)); + EXPECT_CALL(delegate, OnPointerFrame()); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerMotion(testing::_, testing::_)).Times(0); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin() + + gfx::Vector2d(-1, -1)); + + auto child_surface = std::make_unique<Surface>(); + auto child_shell_surface = std::make_unique<ShellSurface>( + child_surface.get(), gfx::Point(), true, false, + ash::desks_util::GetActiveDeskContainerId()); + child_shell_surface->DisableMovement(); + child_shell_surface->SetParent(shell_surface.get()); + gfx::Size child_buffer_size(15, 15); + auto child_buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(child_buffer_size)); + child_surface->Attach(child_buffer.get()); + child_surface->Commit(); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(child_surface.get())) + .WillRepeatedly(testing::Return(true)); + + generator.MoveMouseTo(child_surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerLeave(surface.get())); + EXPECT_CALL(delegate, OnPointerEnter(child_surface.get(), gfx::PointF(), 0)); + EXPECT_CALL(delegate, OnPointerFrame()); + // Moving the cursor to a different surface should change the focus when + // the pointer is unconstrained. + pointer->UnconstrainPointer(); + generator.MoveMouseTo(child_surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(delegate, OnPointerDestroying(pointer.get())); + pointer.reset(); +} +#endif + +#if defined(OS_CHROMEOS) +TEST_F(PointerTest, ConstrainPointerFailsWhenSurfaceIsNotFocused) { + auto scoped_feature_list = std::make_unique<base::test::ScopedFeatureList>(); + scoped_feature_list->InitAndEnableFeature( + chromeos::features::kExoPointerLock); + + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + gfx::Size buffer_size(10, 10); + auto buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); + surface->Attach(buffer.get()); + surface->Commit(); + + MockPointerDelegate delegate; + MockPointerConstraintDelegate constraint_delegate; + Seat seat; + auto pointer = std::make_unique<Pointer>(&delegate, &seat); + aura::client::FocusClient* focus_client = + aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); + focus_client->FocusWindow(nullptr); + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(constraint_delegate, GetConstrainedSurface()) + .WillRepeatedly(testing::Return(surface.get())); + EXPECT_FALSE(pointer->ConstrainPointer(&constraint_delegate)); + + auto child_surface = std::make_unique<Surface>(); + auto child_shell_surface = std::make_unique<ShellSurface>( + child_surface.get(), gfx::Point(), true, false, + ash::desks_util::GetActiveDeskContainerId()); + child_shell_surface->DisableMovement(); + child_shell_surface->SetParent(shell_surface.get()); + gfx::Size child_buffer_size(15, 15); + auto child_buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(child_buffer_size)); + child_surface->Attach(child_buffer.get()); + child_surface->Commit(); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(child_surface.get())) + .WillRepeatedly(testing::Return(true)); + + focus_client->FocusWindow(child_surface->window()); + EXPECT_FALSE(pointer->ConstrainPointer(&constraint_delegate)); + + focus_client->FocusWindow(surface->window()); + EXPECT_TRUE(pointer->ConstrainPointer(&constraint_delegate)); + + EXPECT_CALL(delegate, OnPointerEnter(surface.get(), gfx::PointF(), 0)); + EXPECT_CALL(delegate, OnPointerFrame()); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin()); + + pointer->UnconstrainPointer(); + + EXPECT_CALL(delegate, OnPointerDestroying(pointer.get())); + pointer.reset(); +} +#endif + +#if defined(OS_CHROMEOS) +TEST_F(PointerTest, UnconstrainPointerWhenSurfaceIsDestroyed) { + auto scoped_feature_list = std::make_unique<base::test::ScopedFeatureList>(); + scoped_feature_list->InitAndEnableFeature( + chromeos::features::kExoPointerLock); + + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + gfx::Size buffer_size(10, 10); + auto buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); + surface->Attach(buffer.get()); + surface->Commit(); + + MockPointerDelegate delegate; + MockPointerConstraintDelegate constraint_delegate; + Seat seat; + auto pointer = std::make_unique<Pointer>(&delegate, &seat); + aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()) + ->FocusWindow(surface->window()); + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(constraint_delegate, GetConstrainedSurface()) + .WillRepeatedly(testing::Return(surface.get())); + EXPECT_TRUE(pointer->ConstrainPointer(&constraint_delegate)); + + EXPECT_CALL(delegate, OnPointerEnter(surface.get(), gfx::PointF(), 0)); + EXPECT_CALL(delegate, OnPointerFrame()); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin()); + + // Constraint should be broken if surface is destroyed. + EXPECT_CALL(constraint_delegate, OnConstraintBroken()); + EXPECT_CALL(delegate, OnPointerLeave(surface.get())); + EXPECT_CALL(delegate, OnPointerFrame()); + pointer->OnSurfaceDestroying(surface.get()); + + EXPECT_CALL(delegate, OnPointerDestroying(pointer.get())); + pointer.reset(); +} +#endif + +#if defined(OS_CHROMEOS) +TEST_F(PointerTest, UnconstrainPointerWhenWindowLosesFocus) { + auto scoped_feature_list = std::make_unique<base::test::ScopedFeatureList>(); + scoped_feature_list->InitAndEnableFeature( + chromeos::features::kExoPointerLock); + + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + gfx::Size buffer_size(10, 10); + auto buffer = std::make_unique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); + surface->Attach(buffer.get()); + surface->Commit(); + + MockPointerDelegate delegate; + MockPointerConstraintDelegate constraint_delegate; + Seat seat; + auto pointer = std::make_unique<Pointer>(&delegate, &seat); + aura::client::FocusClient* focus_client = + aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); + focus_client->FocusWindow(surface->window()); + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); + + EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get())) + .WillRepeatedly(testing::Return(true)); + + EXPECT_CALL(constraint_delegate, GetConstrainedSurface()) + .WillRepeatedly(testing::Return(surface.get())); + EXPECT_TRUE(pointer->ConstrainPointer(&constraint_delegate)); + + EXPECT_CALL(delegate, OnPointerEnter(surface.get(), gfx::PointF(), 0)); + EXPECT_CALL(delegate, OnPointerFrame()); + generator.MoveMouseTo(surface->window()->GetBoundsInScreen().origin()); + + EXPECT_CALL(constraint_delegate, OnConstraintBroken()); + focus_client->FocusWindow(nullptr); + + EXPECT_CALL(delegate, OnPointerDestroying(pointer.get())); + pointer.reset(); +} +#endif + } // namespace } // namespace exo
diff --git a/components/feed/core/feed_networking_host.cc b/components/feed/core/feed_networking_host.cc index 697a04c..7280256 100644 --- a/components/feed/core/feed_networking_host.cc +++ b/components/feed/core/feed_networking_host.cc
@@ -77,7 +77,8 @@ signin::AccessTokenInfo access_token_info); void StartLoader(); std::unique_ptr<network::SimpleURLLoader> MakeLoader(); - void SetRequestHeaders(network::ResourceRequest* request) const; + void SetRequestHeaders(bool has_request_body, + network::ResourceRequest* request) const; void PopulateRequestBody(network::SimpleURLLoader* loader); void OnSimpleLoaderComplete(std::unique_ptr<std::string> response); @@ -232,7 +233,7 @@ resource_request->site_for_cookies = net::SiteForCookies::FromUrl(url); } - SetRequestHeaders(resource_request.get()); + SetRequestHeaders(!request_body_.empty(), resource_request.get()); auto simple_loader = network::SimpleURLLoader::Create( std::move(resource_request), traffic_annotation); @@ -243,10 +244,13 @@ return simple_loader; } -void NetworkFetch::SetRequestHeaders(network::ResourceRequest* request) const { - request->headers.SetHeader(net::HttpRequestHeaders::kContentType, - kContentType); - request->headers.SetHeader(kContentEncoding, kGzip); +void NetworkFetch::SetRequestHeaders(bool has_request_body, + network::ResourceRequest* request) const { + if (has_request_body) { + request->headers.SetHeader(net::HttpRequestHeaders::kContentType, + kContentType); + request->headers.SetHeader(kContentEncoding, kGzip); + } variations::SignedIn signed_in_status = variations::SignedIn::kNo; if (!access_token_.empty()) {
diff --git a/components/feed/core/feed_networking_host_unittest.cc b/components/feed/core/feed_networking_host_unittest.cc index 5190192..05e28b7 100644 --- a/components/feed/core/feed_networking_host_unittest.cc +++ b/components/feed/core/feed_networking_host_unittest.cc
@@ -246,7 +246,6 @@ MockResponseDoneCallback done_callback; net::HttpRequestHeaders headers; base::RunLoop interceptor_run_loop; - base::HistogramTester histogram_tester; test_factory()->SetInterceptor( base::BindLambdaForTesting([&](const network::ResourceRequest& request) { @@ -254,9 +253,9 @@ interceptor_run_loop.Quit(); })); - SendRequestAndRespond("http://foobar.com/feed", "POST", "", "", - net::HTTP_OK, network::URLLoaderCompletionStatus(), - &done_callback); + SendRequestAndRespond("http://foobar.com/feed", "POST", "body", "", + net::HTTP_OK, network::URLLoaderCompletionStatus(), + &done_callback); std::string content_encoding; std::string authorization; @@ -267,6 +266,23 @@ EXPECT_EQ(authorization, "Bearer access_token"); } +TEST_F(FeedNetworkingHostTest, ShouldNotSendContentEncodingForEmptyBody) { + MockResponseDoneCallback done_callback; + net::HttpRequestHeaders headers; + base::RunLoop interceptor_run_loop; + + test_factory()->SetInterceptor( + base::BindLambdaForTesting([&](const network::ResourceRequest& request) { + headers = request.headers; + interceptor_run_loop.Quit(); + })); + + SendRequestAndRespond("http://foobar.com/feed", "GET", "", "", net::HTTP_OK, + network::URLLoaderCompletionStatus(), &done_callback); + + EXPECT_FALSE(headers.HasHeader("content-encoding")); +} + TEST_F(FeedNetworkingHostTest, ShouldReportSizeHistograms) { std::string uncompressed_request_string(2048, 'a'); std::string response_string(1024, 'b');
diff --git a/components/policy/core/browser/proxy_policy_handler_unittest.cc b/components/policy/core/browser/proxy_policy_handler_unittest.cc index bb5c6a13..3380b20 100644 --- a/components/policy/core/browser/proxy_policy_handler_unittest.cc +++ b/components/policy/core/browser/proxy_policy_handler_unittest.cc
@@ -212,8 +212,8 @@ EXPECT_FALSE(store_->GetValue(proxy_config::prefs::kProxy, &value)); } -// Regression test for http://crbug.com/78016, CPanel returns empty strings -// for unset properties. +// Regression test for http://crbug.com/78016, device management server returns +// empty strings for unset properties. TEST_F(ProxyPolicyHandlerTest, PacScriptProxyModeBug78016) { PolicyMap policy; policy.Set(key::kProxyServer, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index 159836a..82a63599 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto
@@ -197,7 +197,7 @@ // Device display name. By default, server generates the name in // the format of "Machine Model - Machine Id". However, domain - // admin can update it using CPanel, so do NOT treat it as constant. + // admin can update it using Admin console, so do NOT treat it as constant. optional string machine_name = 2; // Enum listing the possible modes the device should be locked into when the @@ -443,7 +443,7 @@ // filled if the display name is available. // // The display name of the machine as generated by the server or set - // by the Administrator in the CPanel GUI. This is the same thing as + // by the Administrator in the Admin console GUI. This is the same thing as // |machine_name| in DeviceRegisterResponse but it might have // changed since then. optional string machine_name = 5;
diff --git a/components/policy/tools/template_writers/writers/doc_writer_unittest.py b/components/policy/tools/template_writers/writers/doc_writer_unittest.py index 369cc1e6..23a57cf 100755 --- a/components/policy/tools/template_writers/writers/doc_writer_unittest.py +++ b/components/policy/tools/template_writers/writers/doc_writer_unittest.py
@@ -1613,7 +1613,7 @@ def testGoogleCloudChromeOsPolicies(self): # Tests whether Chrome OS policies with management type 'google_cloud' # don't print example values etc. since they are managed through Google's - # CPanel/DPanel, not Active Directory GPO. + # Admin console, not Active Directory GPO. policy = { 'name': 'PolicyName',
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 35bcee6..1af8977a 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -1043,6 +1043,10 @@ return true; } +bool PrintRenderFrameHelper::Delegate::ShouldGenerateTaggedPDF() { + return false; +} + PrintRenderFrameHelper::PrintRenderFrameHelper( content::RenderFrame* render_frame, std::unique_ptr<Delegate> delegate) @@ -1259,6 +1263,10 @@ void PrintRenderFrameHelper::OnPrintPreviewDialogClosed() { ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr()); + // TODO(jschettler): Remove these CHECKs when finished investigating + // https://crbug.com/1019847. + CHECK(!render_frame_gone_); + CHECK(print_preview_context_.source_frame()); print_preview_context_.source_frame()->DispatchAfterPrintEvent(); } #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) @@ -1865,6 +1873,18 @@ print_params.document_cookie); CHECK(metafile.Init()); + // If tagged PDF exporting is enabled, we also need to capture an + // accessibility tree and store it in the metafile. AXTreeSnapshotter + // should stay alive through the end of this function, because text + // drawing commands are only annotated with a DOMNodeId if accessibility + // is enabled. + std::unique_ptr<content::AXTreeSnapshotter> snapshotter; + if (delegate_->ShouldGenerateTaggedPDF()) { + snapshotter = render_frame()->CreateAXTreeSnapshotter(); + snapshotter->Snapshot(ui::kAXModeComplete, 0, + &metafile.accessibility_tree()); + } + PrintHostMsg_DidPrintDocument_Params page_params; gfx::Size* page_size_in_dpi; gfx::Rect* content_area_in_dpi; @@ -2549,7 +2569,9 @@ blink::WebLocalFrame* PrintRenderFrameHelper::PrintPreviewContext::source_frame() { - DCHECK(state_ != UNINITIALIZED); + // TODO(jschettler): Change this back to DCHECK when finished investigating + // https://crbug.com/1019847. + CHECK(state_ != UNINITIALIZED); return source_frame_.GetFrame(); }
diff --git a/components/printing/renderer/print_render_frame_helper.h b/components/printing/renderer/print_render_frame_helper.h index bd00b17..0778dee 100644 --- a/components/printing/renderer/print_render_frame_helper.h +++ b/components/printing/renderer/print_render_frame_helper.h
@@ -106,6 +106,10 @@ // The default implementation returns |true|. virtual bool IsScriptedPrintEnabled(); + // Whether we should send extra metadata necessary to produce a tagged + // (accessible) PDF. + virtual bool ShouldGenerateTaggedPDF(); + // Returns true if printing is overridden and the default behavior should be // skipped for |frame|. virtual bool OverridePrint(blink::WebLocalFrame* frame) = 0;
diff --git a/components/safe_browsing/content/password_protection/metrics_util.h b/components/safe_browsing/content/password_protection/metrics_util.h index 8a0c75d7..ace035a 100644 --- a/components/safe_browsing/content/password_protection/metrics_util.h +++ b/components/safe_browsing/content/password_protection/metrics_util.h
@@ -48,7 +48,6 @@ extern const char kPasswordOnFocusRequestOutcomeHistogram[]; extern const char kPasswordOnFocusVerdictHistogram[]; extern const char kNonSyncPasswordEntryRequestOutcomeHistogram[]; -extern const char kProtectedPasswordEntryRequestOutcomeHistogram[]; extern const char kNonSyncPasswordEntryVerdictHistogram[]; extern const char kSyncPasswordChromeSettingsHistogram[]; extern const char kSyncPasswordEntryRequestOutcomeHistogram[];
diff --git a/components/services/pdf_compositor/BUILD.gn b/components/services/pdf_compositor/BUILD.gn index ccc4858..2e0e99a 100644 --- a/components/services/pdf_compositor/BUILD.gn +++ b/components/services/pdf_compositor/BUILD.gn
@@ -20,6 +20,7 @@ "//printing/common", "//skia", "//third_party/blink/public:blink_headers", + "//ui/accessibility", ] if (is_win) {
diff --git a/components/services/pdf_compositor/DEPS b/components/services/pdf_compositor/DEPS index 3dec59eb..980abab 100644 --- a/components/services/pdf_compositor/DEPS +++ b/components/services/pdf_compositor/DEPS
@@ -11,4 +11,5 @@ "+third_party/skia", "+third_party/blink/public/platform", # Test web sandbox support. "+ui/base/ui_base_features.h", # UI features. + "+ui/accessibility", # Tagged PDF exporting. ]
diff --git a/components/services/pdf_compositor/pdf_compositor_impl.cc b/components/services/pdf_compositor/pdf_compositor_impl.cc index e3692fb1..5f1bca07 100644 --- a/components/services/pdf_compositor/pdf_compositor_impl.cc +++ b/components/services/pdf_compositor/pdf_compositor_impl.cc
@@ -27,6 +27,7 @@ #include "third_party/skia/include/core/SkGraphics.h" #include "third_party/skia/include/core/SkSerialProcs.h" #include "third_party/skia/src/utils/SkMultiPictureDocument.h" +#include "ui/accessibility/ax_tree_update.h" #if defined(OS_WIN) #include "content/public/child/dwrite_font_proxy_init_win.h" @@ -336,7 +337,8 @@ } SkDynamicMemoryWStream wstream; - sk_sp<SkDocument> doc = MakePdfDocument(creator_, &wstream); + sk_sp<SkDocument> doc = + MakePdfDocument(creator_, ui::AXTreeUpdate(), &wstream); for (const auto& page : pages) { SkCanvas* canvas = doc->beginPage(page.fSize.width(), page.fSize.height()); @@ -447,7 +449,7 @@ PdfCompositorImpl::FrameInfo::~FrameInfo() = default; PdfCompositorImpl::DocumentInfo::DocumentInfo(const std::string& creator) - : doc(MakePdfDocument(creator, &compositor_stream)) {} + : doc(MakePdfDocument(creator, ui::AXTreeUpdate(), &compositor_stream)) {} PdfCompositorImpl::DocumentInfo::~DocumentInfo() = default;
diff --git a/components/sync_bookmarks/bookmark_model_merger.cc b/components/sync_bookmarks/bookmark_model_merger.cc index 579848ee..fc0e358 100644 --- a/components/sync_bookmarks/bookmark_model_merger.cc +++ b/components/sync_bookmarks/bookmark_model_merger.cc
@@ -361,10 +361,6 @@ bookmarks::BookmarkModel* bookmark_model) { DCHECK(bookmark_model); - if (!base::FeatureList::IsEnabled(switches::kMergeBookmarksUsingGUIDs)) { - return {}; - } - // Build a temporary lookup table for remote GUIDs. std::unordered_map<std::string, const RemoteTreeNode*> guid_to_remote_node_map; @@ -402,9 +398,14 @@ if (node->is_folder() != remote_entity.is_folder || (node->is_url() && - node->url() != remote_entity.specifics.bookmark().url())) { + node->url() != remote_entity.specifics.bookmark().url()) || + !base::FeatureList::IsEnabled(switches::kMergeBookmarksUsingGUIDs)) { // If local node and its remote node match are conflicting in node type or - // URL, replace local GUID with a random GUID. + // URL, replace local GUID with a random GUID. The logic is applied + // unconditionally if kMergeBookmarksUsingGUIDs is disabled, since no + // GUID-based matches take place and GUIDs need to be reassigned to avoid + // collisions (they will be reassigned once again if there is a semantic + // match). // TODO(crbug.com/978430): Local GUIDs should also be reassigned if they // match a remote originator_client_item_id. ReplaceBookmarkNodeGUID(node, base::GenerateGUID(), bookmark_model); @@ -607,10 +608,12 @@ const bookmarks::BookmarkNode* node = parent->children()[index].get(); DCHECK(!FindMatchingRemoteNodeByGUID(node)); DCHECK(base::IsValidGUID(node->guid())); - const std::string sync_id = - base::FeatureList::IsEnabled(switches::kMergeBookmarksUsingGUIDs) - ? node->guid() - : base::GenerateGUID(); + + // The node's GUID cannot run into collisions because + // FindGuidMatchesOrReassignLocal() takes care of reassigning local GUIDs if + // they won't actually be merged with the remote bookmark with the same GUID + // (e.g. incompatible types). + const std::string sync_id = node->guid(); const int64_t server_version = syncer::kUncommittedVersion; const base::Time creation_time = base::Time::Now(); const std::string& suffix = syncer::GenerateSyncableBookmarkHash(
diff --git a/components/sync_bookmarks/bookmark_model_observer_impl.cc b/components/sync_bookmarks/bookmark_model_observer_impl.cc index a5c8e8f..aa6e3a4 100644 --- a/components/sync_bookmarks/bookmark_model_observer_impl.cc +++ b/components/sync_bookmarks/bookmark_model_observer_impl.cc
@@ -96,10 +96,10 @@ // Assign a temp server id for the entity. Will be overriden by the actual // server id upon receiving commit response. DCHECK(base::IsValidGUID(node->guid())); - const std::string sync_id = - base::FeatureList::IsEnabled(switches::kMergeBookmarksUsingGUIDs) - ? node->guid() - : base::GenerateGUID(); + + // Local bookmark creations should have used a random GUID so it's safe to + // use it as originator client item ID, without the risk for collision. + const std::string sync_id = node->guid(); const int64_t server_version = syncer::kUncommittedVersion; const base::Time creation_time = base::Time::Now(); const sync_pb::UniquePosition unique_position = @@ -266,7 +266,7 @@ : syncer::UniquePosition::After(position, suffix); const sync_pb::EntitySpecifics specifics = CreateSpecificsFromBookmarkNode( - node, model, /*force_favicon_load=*/true); + child.get(), model, /*force_favicon_load=*/true); bookmark_tracker_->Update(sync_id, entity->metadata()->server_version(), modification_time, position.ToProto(), specifics);
diff --git a/components/sync_bookmarks/bookmark_model_observer_impl_unittest.cc b/components/sync_bookmarks/bookmark_model_observer_impl_unittest.cc index a186cb00..4184ac9 100644 --- a/components/sync_bookmarks/bookmark_model_observer_impl_unittest.cc +++ b/components/sync_bookmarks/bookmark_model_observer_impl_unittest.cc
@@ -134,10 +134,8 @@ bookmark_tracker()->GetEntitiesWithLocalChanges(kMaxEntries); ASSERT_THAT(local_changes.size(), 1U); EXPECT_THAT(local_changes[0]->bookmark_node(), Eq(bookmark_node)); - if (base::FeatureList::IsEnabled(switches::kMergeBookmarksUsingGUIDs)) { - EXPECT_THAT(local_changes[0]->metadata()->server_id(), - Eq(bookmark_node->guid())); - } + EXPECT_THAT(local_changes[0]->metadata()->server_id(), + Eq(bookmark_node->guid())); } TEST_F(BookmarkModelObserverImplTest,
diff --git a/components/viz/host/hit_test/hit_test_query.cc b/components/viz/host/hit_test/hit_test_query.cc index b79acee..54cd565 100644 --- a/components/viz/host/hit_test/hit_test_query.cc +++ b/components/viz/host/hit_test/hit_test_query.cc
@@ -7,7 +7,6 @@ #include "base/containers/stack.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_util.h" -#include "base/timer/elapsed_timer.h" #include "components/viz/common/features.h" #include "components/viz/common/hit_test/hit_test_region_list.h" #include "ui/gfx/geometry/point_conversions.h" @@ -106,8 +105,6 @@ const std::vector<FrameSinkId>& target_ancestors, const gfx::PointF& location_in_root, gfx::PointF* transformed_location) const { - base::ElapsedTimer transform_timer; - if (hit_test_data_.empty()) return false; @@ -131,10 +128,6 @@ // TODO(crbug.com/966944): Cache the matrix product such that the transform // can be done immediately. *transformed_location = location_in_root; - UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES("Event.VizHitTest.TransformTimeUs", - transform_timer.Elapsed(), - base::TimeDelta::FromMicroseconds(1), - base::TimeDelta::FromSeconds(10), 50); return TransformLocationForTargetRecursively( target_ancestors, target_ancestors.size() - 1, 0, transformed_location); } @@ -166,7 +159,6 @@ if (hit_test_data_.empty()) return Target(); - base::ElapsedTimer target_timer; Target target; size_t start_index = 0; if (!FindIndexOfFrameSink(frame_sink_id, &start_index)) @@ -175,10 +167,6 @@ FindTargetInRegionForLocation(event_source, location, start_index, is_location_relative_to_parent, frame_sink_id, &target); - UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES("Event.VizHitTest.TargetTimeUs", - target_timer.Elapsed(), - base::TimeDelta::FromMicroseconds(1), - base::TimeDelta::FromSeconds(10), 50); return target; }
diff --git a/components/viz/service/display_embedder/image_context_impl.cc b/components/viz/service/display_embedder/image_context_impl.cc index e37a86e..e38ce38b 100644 --- a/components/viz/service/display_embedder/image_context_impl.cc +++ b/components/viz/service/display_embedder/image_context_impl.cc
@@ -42,16 +42,21 @@ render_pass_id_(render_pass_id), mipmap_(mipmap ? GrMipMapped::kYes : GrMipMapped::kNo) {} +ImageContextImpl::~ImageContextImpl() { + if (fallback_context_state_) + gpu::DeleteGrBackendTexture(fallback_context_state_, &fallback_texture_); +} + void ImageContextImpl::OnContextLost() { if (representation_) { representation_->OnContextLost(); representation_ = nullptr; } -} -ImageContextImpl::~ImageContextImpl() { - if (fallback_context_state_) - gpu::DeleteGrBackendTexture(fallback_context_state_, &fallback_texture_); + if (fallback_context_state_) { + fallback_context_state_ = nullptr; + fallback_texture_ = {}; + } } void ImageContextImpl::CreateFallbackImage(
diff --git a/components/viz/service/hit_test/hit_test_aggregator.cc b/components/viz/service/hit_test/hit_test_aggregator.cc index ee8eee16..bbf7ebf 100644 --- a/components/viz/service/hit_test/hit_test_aggregator.cc +++ b/components/viz/service/hit_test/hit_test_aggregator.cc
@@ -4,8 +4,6 @@ #include "components/viz/service/hit_test/hit_test_aggregator.h" -#include "base/metrics/histogram_macros.h" -#include "base/timer/elapsed_timer.h" #include "base/trace_event/trace_event.h" #include "components/viz/common/hit_test/hit_test_region_list.h" #include "components/viz/common/quads/debug_border_draw_quad.h" @@ -57,12 +55,7 @@ hit_test_debug_ = false; hit_test_debug_ask_regions_ = 0; - base::ElapsedTimer aggregate_timer; AppendRoot(display_surface_id); - UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES("Event.VizHitTest.AggregateTimeUs", - aggregate_timer.Elapsed(), - base::TimeDelta::FromMicroseconds(1), - base::TimeDelta::FromSeconds(10), 50); SendHitTestData(); if (hit_test_debug_ && render_passes) { @@ -192,7 +185,6 @@ DCHECK_GE(region_index, 1u); int32_t child_count = region_index - 1; - UMA_HISTOGRAM_COUNTS_1000("Event.VizHitTest.HitTestRegions", region_index); SetRegionAt(0, surface_id.frame_sink_id(), hit_test_region_list->flags, hit_test_region_list->async_hit_test_reasons, hit_test_region_list->bounds, hit_test_region_list->transform,
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc index ecb7001..3b37ef6 100644 --- a/content/app/content_main_runner_impl.cc +++ b/content/app/content_main_runner_impl.cc
@@ -491,11 +491,6 @@ InitializeFieldTrialAndFeatureList(); delegate->PostFieldTrialInitialization(); - service_manager::SandboxType sandbox_type = - service_manager::SandboxTypeFromCommandLine(command_line); - if (sandbox_type == service_manager::SandboxType::kProfiling) - sandbox::SetUseLocaltimeOverride(false); - for (size_t i = 0; i < base::size(kMainFunctions); ++i) { if (process_type == kMainFunctions[i].name) return kMainFunctions[i].function(main_params);
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.cc b/content/browser/browsing_data/browsing_data_remover_impl.cc index f115e243..503ba73 100644 --- a/content/browser/browsing_data/browsing_data_remover_impl.cc +++ b/content/browser/browsing_data/browsing_data_remover_impl.cc
@@ -459,11 +459,14 @@ delete_begin, delete_end, nullable_filter, CreateTaskCompletionClosureForMojo(TracingDataType::kCodeCaches)); - // When clearing cache, wipe accumulated network related data - // (TransportSecurityState and HttpServerPropertiesManager data). - network_context->ClearNetworkingHistorySince( - delete_begin, - CreateTaskCompletionClosureForMojo(TracingDataType::kNetworkHistory)); + // TODO(crbug.com/1985971) : Implement filtering for NetworkHistory. + if (filter_builder->GetMode() == BrowsingDataFilterBuilder::BLACKLIST) { + // When clearing cache, wipe accumulated network related data + // (TransportSecurityState and HttpServerPropertiesManager data). + network_context->ClearNetworkingHistorySince( + delete_begin, + CreateTaskCompletionClosureForMojo(TracingDataType::kNetworkHistory)); + } // Clears the PrefetchedSignedExchangeCache of all RenderFrameHostImpls. RenderFrameHostImpl::ClearAllPrefetchedSignedExchangeCache();
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index a2c47a3..8f84049 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -595,6 +595,11 @@ base::ThreadTaskRunnerHandle::Get())); default_loader_used_ = false; + // If |url_loader_| already exists, this means we are following a redirect + // using an interceptor. In this case we should make sure to reset the + // loader, similar to what is done in Restart(). + if (url_loader_) + url_loader_->ResetForFollowRedirect(); url_loader_ = blink::ThrottlingURLLoader::CreateLoaderAndStart( std::move(single_request_factory), std::move(throttles), frame_tree_node_id_, global_request_id_.request_id,
diff --git a/content/browser/renderer_host/render_widget_targeter.cc b/content/browser/renderer_host/render_widget_targeter.cc index dd2876a..8a18f925b 100644 --- a/content/browser/renderer_host/render_widget_targeter.cc +++ b/content/browser/renderer_host/render_widget_targeter.cc
@@ -146,16 +146,6 @@ return false; } -void RenderWidgetTargeter::TargetingRequest::StartQueueingTimeTracker() { - tracker = - std::make_unique<TracingUmaTracker>("Event.AsyncTargeting.TimeInQueue"); -} - -void RenderWidgetTargeter::TargetingRequest::StopQueueingTimeTracker() { - if (tracker) - tracker->StopAndRecord(); -} - bool RenderWidgetTargeter::TargetingRequest::IsWebInputEventRequest() const { return !!event; } @@ -223,7 +213,6 @@ void RenderWidgetTargeter::ResolveTargetingRequest(TargetingRequest request) { if (request_in_flight_) { - request.StartQueueingTimeTracker(); requests_.push(std::move(request)); return; } @@ -340,7 +329,6 @@ if (!request.GetRootView()) continue; - request.StopQueueingTimeTracker(); // Only notify the delegate once that the current event queue is being // flushed. Once all the events are flushed, notify the delegate again. if (!events_being_flushed) {
diff --git a/content/browser/renderer_host/render_widget_targeter.h b/content/browser/renderer_host/render_widget_targeter.h index e9ac770..7b29f17 100644 --- a/content/browser/renderer_host/render_widget_targeter.h +++ b/content/browser/renderer_host/render_widget_targeter.h
@@ -155,10 +155,6 @@ gfx::PointF GetLocation() const; const ui::LatencyInfo& GetLatency() const; - // Queued TargetingRequest - void StartQueueingTimeTracker(); - void StopQueueingTimeTracker(); - private: base::WeakPtr<RenderWidgetHostViewBase> root_view; @@ -171,9 +167,6 @@ ui::WebScopedInputEvent event; ui::LatencyInfo latency; - // To track how long the request has been queued. - std::unique_ptr<TracingUmaTracker> tracker; - DISALLOW_COPY_AND_ASSIGN(TargetingRequest); };
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm index 2f53e6dd..d83664e 100644 --- a/content/browser/sandbox_parameters_mac.mm +++ b/content/browser/sandbox_parameters_mac.mm
@@ -239,7 +239,6 @@ SetupPPAPISandboxParameters(client); #endif break; - case service_manager::SandboxType::kProfiling: case service_manager::SandboxType::kUtility: SetupUtilitySandboxParameters(client, command_line); break;
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc index 48cb1eb..bb0d2623 100644 --- a/content/browser/site_per_process_hit_test_browsertest.cc +++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -10,7 +10,6 @@ #include "base/stl_util.h" #include "base/task/post_task.h" #include "base/test/bind_test_util.h" -#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_timeouts.h" #include "build/build_config.h" @@ -3055,47 +3054,6 @@ EXPECT_FALSE(child_frame_monitor.EventWasReceived()); } -IN_PROC_BROWSER_TEST_F(SitePerProcessHitTestBrowserTest, - RecordTimeInQueueMetric) { - GURL main_url(embedded_test_server()->GetURL( - "/frame_tree/page_with_masked_iframe.html")); - EXPECT_TRUE(NavigateToURL(shell(), main_url)); - - FrameTreeNode* root = web_contents()->GetFrameTree()->root(); - ASSERT_EQ(1U, root->child_count()); - - FrameTreeNode* child_node = root->child_at(0); - - RenderWidgetHostInputEventRouter* router = - web_contents()->GetInputEventRouter(); - - WaitForHitTestData(child_node->current_frame_host()); - - router->GetRenderWidgetTargeterForTests() - ->set_async_hit_test_timeout_delay_for_testing(base::TimeDelta()); - - RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( - root->current_frame_host()->GetRenderWidgetHost()->GetView()); - - blink::WebMouseEvent child_event( - blink::WebInputEvent::kMouseDown, blink::WebInputEvent::kNoModifiers, - blink::WebInputEvent::GetStaticTimeStampForTests()); - child_event.button = blink::WebPointerProperties::Button::kLeft; - SetWebEventPositions(&child_event, gfx::Point(75, 75), root_view); - child_event.click_count = 1; - - base::HistogramTester tester; - - InputEventAckWaiter waiter(root_view->GetRenderWidgetHost(), - blink::WebInputEvent::kMouseDown); - // Need at least two events to generate a queue. - router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); - router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); - waiter.Wait(); - - tester.ExpectTotalCount("Event.AsyncTargeting.TimeInQueue", 1); -} - // Tooltips aren't used on Android, so no need to compile/run this test in that // case. #if !defined(OS_ANDROID)
diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc index bcbe661..0ce9c82 100644 --- a/content/browser/utility_process_host.cc +++ b/content/browser/utility_process_host.cc
@@ -85,7 +85,6 @@ sandbox_type_ == service_manager::SandboxType::kNetwork || sandbox_type_ == service_manager::SandboxType::kCdm || sandbox_type_ == service_manager::SandboxType::kPdfCompositor || - sandbox_type_ == service_manager::SandboxType::kProfiling || sandbox_type_ == service_manager::SandboxType::kPpapi || #if defined(OS_CHROMEOS) sandbox_type_ == service_manager::SandboxType::kIme ||
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NestedSystemMessageHandler.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NestedSystemMessageHandler.java index cedb5804..06b1444f 100644 --- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NestedSystemMessageHandler.java +++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NestedSystemMessageHandler.java
@@ -24,22 +24,74 @@ * and dispatch them. */ @JNINamespace("content") -class NestedSystemMessageHandler { - // See org.chromium.base.SystemMessageHandler for more message ids. - // The id here should not conflict with the ones in SystemMessageHandler. +public class NestedSystemMessageHandler { private static final int QUIT_MESSAGE = 10; private static final Handler sHandler = new Handler(); + private static final Method sNextMethod = getMethod(MessageQueue.class, "next"); + private static final Field sMessageTargetField = getField(Message.class, "target"); + private static final Field sMessageFlagsField = getField(Message.class, "flags"); + + private static Field getField(Class<?> clazz, String name) { + Field f = null; + try { + f = clazz.getDeclaredField(name); + f.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + return f; + } + + private static Method getMethod(Class<?> clazz, String name) { + Method m = null; + try { + m = clazz.getDeclaredMethod(name); + m.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + return m; + } private NestedSystemMessageHandler() {} /** + * Runs a single nested task on the provided MessageQueue + * + * @return whether the current loop should quit. + */ + public static boolean runSingleNestedLooperTask(MessageQueue queue) + throws IllegalArgumentException, IllegalAccessException, SecurityException, + InvocationTargetException { + boolean quitLoop = false; + Message msg = (Message) sNextMethod.invoke(queue); + if (msg == null) return true; + if (msg.what == QUIT_MESSAGE) { + quitLoop = true; + } + Handler target = (Handler) sMessageTargetField.get(msg); + + if (target == null) { + // No target is a magic identifier for the quit message. + quitLoop = true; + } else { + target.dispatchMessage(msg); + } + + // Unset in-use flag. + Integer oldFlags = (Integer) sMessageFlagsField.get(msg); + sMessageFlagsField.set(msg, oldFlags & ~(1 << 0 /* FLAG_IN_USE */)); + + msg.recycle(); + return quitLoop; + } + + /** * Processes messages from the current MessageQueue till the queue becomes idle. */ @SuppressWarnings("unused") @CalledByNative - private boolean runNestedLoopTillIdle() { - boolean quitLoop = false; - + private static boolean runNestedLoopTillIdle() { MessageQueue queue = Looper.myQueue(); queue.addIdleHandler(new MessageQueue.IdleHandler() { @Override @@ -49,107 +101,14 @@ } }); - Class<?> messageQueueClazz = queue.getClass(); - Method nextMethod = null; try { - nextMethod = messageQueueClazz.getDeclaredMethod("next"); - } catch (SecurityException e) { + while (!runSingleNestedLooperTask(queue)) { + } + } catch (IllegalArgumentException | IllegalAccessException | SecurityException + | InvocationTargetException e) { e.printStackTrace(); return false; - } catch (NoSuchMethodException e) { - e.printStackTrace(); - return false; - } - nextMethod.setAccessible(true); - - while (!quitLoop) { - Message msg = null; - try { - msg = (Message) nextMethod.invoke(queue); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return false; - } catch (IllegalAccessException e) { - e.printStackTrace(); - return false; - } catch (InvocationTargetException e) { - e.printStackTrace(); - return false; - } - - if (msg != null) { - if (msg.what == QUIT_MESSAGE) { - quitLoop = true; - } - Class messageClazz = msg.getClass(); - Field targetFiled = null; - try { - targetFiled = messageClazz.getDeclaredField("target"); - } catch (SecurityException e) { - e.printStackTrace(); - return false; - } catch (NoSuchFieldException e) { - e.printStackTrace(); - return false; - } - targetFiled.setAccessible(true); - - Handler target = null; - try { - target = (Handler) targetFiled.get(msg); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return false; - } catch (IllegalAccessException e) { - e.printStackTrace(); - return false; - } - - if (target == null) { - // No target is a magic identifier for the quit message. - quitLoop = true; - } else { - target.dispatchMessage(msg); - } - - // Unset in-use flag. - Field flagsField = null; - try { - flagsField = messageClazz.getDeclaredField("flags"); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return false; - } catch (SecurityException e) { - e.printStackTrace(); - return false; - } catch (NoSuchFieldException e) { - e.printStackTrace(); - return false; - } - flagsField.setAccessible(true); - - try { - Integer oldFlags = (Integer) flagsField.get(msg); - flagsField.set(msg, oldFlags & ~(1 << 0 /* FLAG_IN_USE */)); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return false; - } catch (IllegalAccessException e) { - e.printStackTrace(); - return false; - } - - msg.recycle(); - } else { - quitLoop = true; - } } return true; } - - @SuppressWarnings("unused") - @CalledByNative - private static NestedSystemMessageHandler create() { - return new NestedSystemMessageHandler(); - } }
diff --git a/content/public/test/nested_message_pump_android.cc b/content/public/test/nested_message_pump_android.cc index 12e54af..8e7b22e3 100644 --- a/content/public/test/nested_message_pump_android.cc +++ b/content/public/test/nested_message_pump_android.cc
@@ -6,21 +6,12 @@ #include "base/android/jni_android.h" #include "base/android/scoped_java_ref.h" -#include "base/lazy_instance.h" #include "base/logging.h" #include "base/synchronization/waitable_event.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "content/public/test/android/test_support_content_jni_headers/NestedSystemMessageHandler_jni.h" -namespace { - -base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject>>:: - DestructorAtExit g_message_handler_obj = LAZY_INSTANCE_INITIALIZER; - -} // namespace - - namespace content { struct NestedMessagePumpAndroid::RunState { @@ -94,8 +85,7 @@ // No native tasks to process right now. Process tasks from the Java // System message handler. This will return when the java message queue // is idle. - bool ret = Java_NestedSystemMessageHandler_runNestedLoopTillIdle( - env, g_message_handler_obj.Get()); + bool ret = Java_NestedSystemMessageHandler_runNestedLoopTillIdle(env); CHECK(ret) << "Error running java message loop, tests will likely fail."; if (state_->delayed_work_time.is_null()) { @@ -118,13 +108,7 @@ state_ = previous_state; } -void NestedMessagePumpAndroid::Attach( - base::MessagePump::Delegate* delegate) { - JNIEnv* env = base::android::AttachCurrentThread(); - DCHECK(env); - g_message_handler_obj.Get().Reset( - Java_NestedSystemMessageHandler_create(env)); -} +void NestedMessagePumpAndroid::Attach(base::MessagePump::Delegate* delegate) {} void NestedMessagePumpAndroid::Quit() { if (state_) {
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 132bf22..586c311 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -134,6 +134,7 @@ BlinkAXTreeSource tree_source(render_frame_, ax_mode); tree_source.SetRoot(root); + tree_source.EnableDOMNodeIDs(); ScopedFreezeBlinkAXTreeSource freeze(&tree_source); // The serializer returns an AXContentTreeUpdate, which can store a complete
diff --git a/device/bluetooth/dbus/bluetooth_adapter_client.cc b/device/bluetooth/dbus/bluetooth_adapter_client.cc index 9f7288e..9843814 100644 --- a/device/bluetooth/dbus/bluetooth_adapter_client.cc +++ b/device/bluetooth/dbus/bluetooth_adapter_client.cc
@@ -224,11 +224,10 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = new Properties( + return new Properties( object_proxy, interface_name, - base::Bind(&BluetoothAdapterClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + base::BindRepeating(&BluetoothAdapterClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // BluetoothAdapterClient override.
diff --git a/device/bluetooth/dbus/bluetooth_device_client.cc b/device/bluetooth/dbus/bluetooth_device_client.cc index 4ef0162..2f71e142 100644 --- a/device/bluetooth/dbus/bluetooth_device_client.cc +++ b/device/bluetooth/dbus/bluetooth_device_client.cc
@@ -246,11 +246,10 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = - new Properties(object_proxy, interface_name, - base::Bind(&BluetoothDeviceClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + return new Properties( + object_proxy, interface_name, + base::BindRepeating(&BluetoothDeviceClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // BluetoothDeviceClient override.
diff --git a/device/bluetooth/dbus/bluetooth_gatt_characteristic_client.cc b/device/bluetooth/dbus/bluetooth_gatt_characteristic_client.cc index 43a33b4..c8bb761 100644 --- a/device/bluetooth/dbus/bluetooth_gatt_characteristic_client.cc +++ b/device/bluetooth/dbus/bluetooth_gatt_characteristic_client.cc
@@ -231,11 +231,11 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = new Properties( + return new Properties( object_proxy, interface_name, - base::Bind(&BluetoothGattCharacteristicClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + base::BindRepeating( + &BluetoothGattCharacteristicClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // dbus::ObjectManager::Interface override.
diff --git a/device/bluetooth/dbus/bluetooth_gatt_descriptor_client.cc b/device/bluetooth/dbus/bluetooth_gatt_descriptor_client.cc index 2406a7d..ae142baa83 100644 --- a/device/bluetooth/dbus/bluetooth_gatt_descriptor_client.cc +++ b/device/bluetooth/dbus/bluetooth_gatt_descriptor_client.cc
@@ -150,11 +150,11 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = new Properties( + return new Properties( object_proxy, interface_name, - base::Bind(&BluetoothGattDescriptorClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + base::BindRepeating( + &BluetoothGattDescriptorClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // dbus::ObjectManager::Interface override.
diff --git a/device/bluetooth/dbus/bluetooth_gatt_service_client.cc b/device/bluetooth/dbus/bluetooth_gatt_service_client.cc index 06b69f8..9d9eb3db 100644 --- a/device/bluetooth/dbus/bluetooth_gatt_service_client.cc +++ b/device/bluetooth/dbus/bluetooth_gatt_service_client.cc
@@ -69,11 +69,10 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = new Properties( + return new Properties( object_proxy, interface_name, - base::Bind(&BluetoothGattServiceClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + base::BindRepeating(&BluetoothGattServiceClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // dbus::ObjectManager::Interface override.
diff --git a/device/bluetooth/dbus/bluetooth_input_client.cc b/device/bluetooth/dbus/bluetooth_input_client.cc index 9d37cd6..7b3a130 100644 --- a/device/bluetooth/dbus/bluetooth_input_client.cc +++ b/device/bluetooth/dbus/bluetooth_input_client.cc
@@ -56,11 +56,10 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = - new Properties(object_proxy, interface_name, - base::Bind(&BluetoothInputClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return static_cast<dbus::PropertySet*>(properties); + return new Properties( + object_proxy, interface_name, + base::BindRepeating(&BluetoothInputClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } // BluetoothInputClient override.
diff --git a/device/bluetooth/dbus/bluetooth_media_transport_client.cc b/device/bluetooth/dbus/bluetooth_media_transport_client.cc index 28898ed..841fb9e4 100644 --- a/device/bluetooth/dbus/bluetooth_media_transport_client.cc +++ b/device/bluetooth/dbus/bluetooth_media_transport_client.cc
@@ -73,11 +73,11 @@ dbus::ObjectProxy* object_proxy, const dbus::ObjectPath& object_path, const std::string& interface_name) override { - Properties* properties = new Properties( + return new Properties( object_proxy, interface_name, - base::Bind(&BluetoothMediaTransportClientImpl::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); - return properties; + base::BindRepeating( + &BluetoothMediaTransportClientImpl::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); } void ObjectAdded(const dbus::ObjectPath& object_path,
diff --git a/device/bluetooth/dbus/fake_bluetooth_device_client.cc b/device/bluetooth/dbus/fake_bluetooth_device_client.cc index a2731b13..f16c5c90 100644 --- a/device/bluetooth/dbus/fake_bluetooth_device_client.cc +++ b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
@@ -320,9 +320,9 @@ max_transmit_power_(kUnkownPower), delay_start_discovery_(false), should_leave_connections_pending_(false) { - std::unique_ptr<Properties> properties(new Properties( - base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, - base::Unretained(this), dbus::ObjectPath(kPairedDevicePath)))); + std::unique_ptr<Properties> properties(new Properties(base::BindRepeating( + &FakeBluetoothDeviceClient::OnPropertyChanged, base::Unretained(this), + dbus::ObjectPath(kPairedDevicePath)))); properties->address.ReplaceValue(kPairedDeviceAddress); properties->bluetooth_class.ReplaceValue(kPairedDeviceClass); properties->name.ReplaceValue(kPairedDeviceName); @@ -714,9 +714,9 @@ if (base::Contains(device_list_, device_path)) return; - std::unique_ptr<Properties> properties( - new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, - base::Unretained(this), device_path))); + std::unique_ptr<Properties> properties(new Properties( + base::BindRepeating(&FakeBluetoothDeviceClient::OnPropertyChanged, + base::Unretained(this), device_path))); properties->adapter.ReplaceValue(adapter_path); properties->type.ReplaceValue(BluetoothDeviceClient::kTypeBredr); properties->type.set_valid(true); @@ -849,9 +849,9 @@ if (base::Contains(device_list_, device_path)) return; - std::unique_ptr<Properties> properties( - new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, - base::Unretained(this), device_path))); + std::unique_ptr<Properties> properties(new Properties( + base::BindRepeating(&FakeBluetoothDeviceClient::OnPropertyChanged, + base::Unretained(this), device_path))); properties->adapter.ReplaceValue(adapter_path); properties->name.ReplaceValue(props.device_name); properties->name.set_valid(true); @@ -1904,9 +1904,9 @@ device_path = dbus::ObjectPath(adapter_path.value() + "/dev" + id); } while (base::Contains(device_list_, device_path)); - std::unique_ptr<Properties> properties( - new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, - base::Unretained(this), device_path))); + std::unique_ptr<Properties> properties(new Properties( + base::BindRepeating(&FakeBluetoothDeviceClient::OnPropertyChanged, + base::Unretained(this), device_path))); properties->adapter.ReplaceValue(adapter_path); properties->address.ReplaceValue(device_address);
diff --git a/device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.cc b/device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.cc index 42b8acff..5fb46d8 100644 --- a/device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.cc +++ b/device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.cc
@@ -398,10 +398,10 @@ // ==== Heart Rate Measurement Characteristic ==== heart_rate_measurement_path_ = service_path.value() + "/" + kHeartRateMeasurementPathComponent; - heart_rate_measurement_properties_.reset(new Properties( - base::Bind(&FakeBluetoothGattCharacteristicClient::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), - dbus::ObjectPath(heart_rate_measurement_path_)))); + heart_rate_measurement_properties_.reset(new Properties(base::BindRepeating( + &FakeBluetoothGattCharacteristicClient::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), + dbus::ObjectPath(heart_rate_measurement_path_)))); heart_rate_measurement_properties_->uuid.ReplaceValue( kHeartRateMeasurementUUID); heart_rate_measurement_properties_->service.ReplaceValue(service_path); @@ -412,10 +412,10 @@ // ==== Body Sensor Location Characteristic ==== body_sensor_location_path_ = service_path.value() + "/" + kBodySensorLocationPathComponent; - body_sensor_location_properties_.reset(new Properties( - base::Bind(&FakeBluetoothGattCharacteristicClient::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), - dbus::ObjectPath(body_sensor_location_path_)))); + body_sensor_location_properties_.reset(new Properties(base::BindRepeating( + &FakeBluetoothGattCharacteristicClient::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), + dbus::ObjectPath(body_sensor_location_path_)))); body_sensor_location_properties_->uuid.ReplaceValue(kBodySensorLocationUUID); body_sensor_location_properties_->service.ReplaceValue(service_path); flags.clear(); @@ -425,10 +425,10 @@ // ==== Heart Rate Control Point Characteristic ==== heart_rate_control_point_path_ = service_path.value() + "/" + kHeartRateControlPointPathComponent; - heart_rate_control_point_properties_.reset(new Properties( - base::Bind(&FakeBluetoothGattCharacteristicClient::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), - dbus::ObjectPath(heart_rate_control_point_path_)))); + heart_rate_control_point_properties_.reset(new Properties(base::BindRepeating( + &FakeBluetoothGattCharacteristicClient::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), + dbus::ObjectPath(heart_rate_control_point_path_)))); heart_rate_control_point_properties_->uuid.ReplaceValue( kHeartRateControlPointUUID); heart_rate_control_point_properties_->service.ReplaceValue(service_path);
diff --git a/device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.cc b/device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.cc index df5f8e3..86ff2d0 100644 --- a/device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.cc +++ b/device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.cc
@@ -162,8 +162,8 @@ } Properties* properties = new Properties( - base::Bind(&FakeBluetoothGattDescriptorClient::OnPropertyChanged, - weak_ptr_factory_.GetWeakPtr(), object_path)); + base::BindRepeating(&FakeBluetoothGattDescriptorClient::OnPropertyChanged, + weak_ptr_factory_.GetWeakPtr(), object_path)); properties->uuid.ReplaceValue(uuid); properties->characteristic.ReplaceValue(characteristic_path);
diff --git a/device/bluetooth/dbus/fake_bluetooth_input_client.cc b/device/bluetooth/dbus/fake_bluetooth_input_client.cc index 9d72a0de2..ace8245 100644 --- a/device/bluetooth/dbus/fake_bluetooth_input_client.cc +++ b/device/bluetooth/dbus/fake_bluetooth_input_client.cc
@@ -75,8 +75,8 @@ return; std::unique_ptr<Properties> properties = std::make_unique<Properties>( - base::Bind(&FakeBluetoothInputClient::OnPropertyChanged, - base::Unretained(this), object_path)); + base::BindRepeating(&FakeBluetoothInputClient::OnPropertyChanged, + base::Unretained(this), object_path)); // The LegacyAutopair and DisplayPinCode devices represent a typical mouse // and keyboard respectively, so mark them as ReconnectMode "any". The
diff --git a/device/bluetooth/dbus/fake_bluetooth_media_transport_client.cc b/device/bluetooth/dbus/fake_bluetooth_media_transport_client.cc index 990f9fe5..76983fe 100644 --- a/device/bluetooth/dbus/fake_bluetooth_media_transport_client.cc +++ b/device/bluetooth/dbus/fake_bluetooth_media_transport_client.cc
@@ -166,9 +166,9 @@ << " is created for endpoint " << endpoint_path.value(); // Sets the fake property set with default values. - std::unique_ptr<Properties> properties(new Properties( - base::Bind(&FakeBluetoothMediaTransportClient::OnPropertyChanged, - base::Unretained(this)))); + std::unique_ptr<Properties> properties(new Properties(base::BindRepeating( + &FakeBluetoothMediaTransportClient::OnPropertyChanged, + base::Unretained(this)))); properties->device.ReplaceValue(ObjectPath(kTransportDevicePath)); properties->uuid.ReplaceValue( BluetoothMediaClient::kBluetoothAudioSinkUUID);
diff --git a/docs/memory-infra/memory_benchmarks.md b/docs/memory-infra/memory_benchmarks.md index 35599e13..a61bc57 100644 --- a/docs/memory-infra/memory_benchmarks.md +++ b/docs/memory-infra/memory_benchmarks.md
@@ -173,8 +173,9 @@ * **Benchmark**: The name of the benchmark to run. If you are interested in memory try `system_health.memory_mobile` or `system_health.memory_desktop` as appropriate. -* **Story** (optional): A pattern passed to Telemetry's `--story-filter` - option to only run stories that match the pattern. +* **Story** (optional): A pattern (Python regular expression) passed to + Telemetry's `--story-filter` option to only run stories that match the + pattern. * **Extra Test Arguments** (optional): Additional command line arguments for Telemetry's `run_benchmark`. Of note, if you are interested in running a small but representative sample of system health stories you can pass
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 0415e25..fdcdc30 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -837,6 +837,25 @@ kBindBufferRange }; + // Helper class to ensure that GLES2DecoderImpl::Destroy() is always called + // unless we specifically call OnSuccess(). + class DestroyOnFailure { + public: + DestroyOnFailure(GLES2DecoderImpl* decoder) : decoder_(decoder) {} + ~DestroyOnFailure() { + if (!success_) + decoder_->Destroy(has_context_); + } + + void OnSuccess() { success_ = true; } + void LoseContext() { has_context_ = false; } + + private: + GLES2DecoderImpl* decoder_ = nullptr; + bool success_ = false; + bool has_context_ = true; + }; + const char* GetCommandName(unsigned int command_id) const; // Initialize or re-initialize the shader translator. @@ -3539,6 +3558,10 @@ surfaceless_ = surface->IsSurfaceless() && !offscreen; set_initialized(); + // At this point we are partially initialized and must Destroy() in any + // failure case. + DestroyOnFailure destroy_on_failure(this); + gpu_state_tracer_ = GPUStateTracer::Create(&state_); if (group_->gpu_preferences().enable_gpu_debugging) @@ -3581,7 +3604,6 @@ feature_info_->feature_flags().is_swiftshader_for_webgl) { // Must not destroy ContextGroup if it is not initialized. group_ = nullptr; - Destroy(true); LOG(ERROR) << "ContextResult::kFatalFailure: " "fail_if_major_perf_caveat + swiftshader"; return gpu::ContextResult::kFatalFailure; @@ -3591,7 +3613,6 @@ if (attrib_helper.context_type == CONTEXT_TYPE_WEBGL2_COMPUTE) { // Must not destroy ContextGroup if it is not initialized. group_ = nullptr; - Destroy(true); LOG(ERROR) << "ContextResult::kFatalFailure: " "webgl2-compute is not supported on validating command decoder."; @@ -3603,7 +3624,6 @@ if (result != gpu::ContextResult::kSuccess) { // Must not destroy ContextGroup if it is not initialized. group_ = nullptr; - Destroy(true); return result; } CHECK_GL_ERROR(); @@ -3630,7 +3650,6 @@ } if (!supported) { - Destroy(true); LOG(ERROR) << "ContextResult::kFatalFailure: " "native gmb format not supported"; return gpu::ContextResult::kFatalFailure; @@ -4007,7 +4026,6 @@ // of the frame buffers is okay. if (!ResizeOffscreenFramebuffer( gfx::Size(state_.viewport_width, state_.viewport_height))) { - Destroy(true); LOG(ERROR) << "ContextResult::kFatalFailure: " "Could not allocate offscreen buffer storage."; return gpu::ContextResult::kFatalFailure; @@ -4023,7 +4041,6 @@ if (offscreen_saved_frame_buffer_->CheckStatus() != GL_FRAMEBUFFER_COMPLETE) { bool was_lost = CheckResetStatus(); - Destroy(true); LOG(ERROR) << (was_lost ? "ContextResult::kTransientFailure: " : "ContextResult::kFatalFailure: ") << "Offscreen saved FBO was incomplete."; @@ -4117,9 +4134,11 @@ LOG(ERROR) << " GLES2DecoderImpl: Context reset detected after initialization."; group_->LoseContexts(error::kUnknown); + destroy_on_failure.LoseContext(); return gpu::ContextResult::kTransientFailure; } + destroy_on_failure.OnSuccess(); return gpu::ContextResult::kSuccess; } @@ -6501,11 +6520,7 @@ service_id = GetBackbufferServiceId(); } - if (workarounds().do_extra_flush_around_bindframebuffer) - api()->glFlushFn(); api()->glBindFramebufferEXTFn(target, service_id); - if (workarounds().do_extra_flush_around_bindframebuffer) - api()->glFlushFn(); OnFboChanged(); }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc index 801d75f..98f0a80 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -434,13 +434,9 @@ GLenum target, GLuint framebuffer) { CheckErrorCallbackState(); - if (feature_info_->workarounds().do_extra_flush_around_bindframebuffer) - api()->glFlushFn(); api()->glBindFramebufferEXTFn( target, GetFramebufferServiceID(api(), framebuffer, &framebuffer_id_map_, bind_generates_resource_)); - if (feature_info_->workarounds().do_extra_flush_around_bindframebuffer) - api()->glFlushFn(); if (CheckErrorCallbackState()) { return error::kNoError; }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc index 3118624..44fb80e 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -518,7 +518,8 @@ gpu::ContextResult result = decoder_->Initialize( surface_, context_, false, DisallowedFeatures(), attribs); if (result != gpu::ContextResult::kSuccess) { - decoder_->Destroy(false /* have_context */); + // GLES2CmdDecoder::Destroy should be handled by Initialize in all failure + // cases. decoder_.reset(); group_->Destroy(mock_decoder_.get(), false); return result;
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json index 14156bee..12c8271 100644 --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json
@@ -3463,22 +3463,6 @@ ] }, { - "id": 325, - "cr_bugs": [1018028], - "description": "Do extra flush before and after BindFrameBuffer call", - "os": { - "type": "win" - }, - "driver_vendor": ".*Intel.*", - "driver_version": { - "op": "<", - "value": "24.20.100.6286" - }, - "features": [ - "do_extra_flush_around_bindframebuffer" - ] - }, - { "id": 326, "description": "Migrating OpenGL contexts between low- and high-power GPUs is unreliable on Mac NVIDIA laptops", "cr_bugs": [681341],
diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt index a164fe5..7075196 100644 --- a/gpu/config/gpu_workaround_list.txt +++ b/gpu/config/gpu_workaround_list.txt
@@ -117,5 +117,4 @@ disable_half_float_for_gmb prefer_draw_to_copy remove_dynamic_indexing_of_swizzled_vector -do_extra_flush_around_bindframebuffer disable_dual_source_blending_support
diff --git a/gpu/vulkan/features.gni b/gpu/vulkan/features.gni index d55edde..015bad2 100644 --- a/gpu/vulkan/features.gni +++ b/gpu/vulkan/features.gni
@@ -9,4 +9,9 @@ declare_args() { # Enable experimental vulkan backend. enable_vulkan = is_linux || is_android || is_fuchsia + + # Enable swiftshader vulkan. Disabling it can save build time, however + # --use-vulkan=swiftshader and some tests which using swiftshader vulan will + # not work. + enable_swiftshader_vulkan = true }
diff --git a/gpu/vulkan/x/BUILD.gn b/gpu/vulkan/x/BUILD.gn index 4a1158c..2ea73efd 100644 --- a/gpu/vulkan/x/BUILD.gn +++ b/gpu/vulkan/x/BUILD.gn
@@ -38,9 +38,11 @@ "//gpu/vulkan", ] - # Vulkan Swiftshader can only be built on Linux. - # TODO(samans): Support more platforms. https://crbug.com/963988 - data_deps = [ - "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan", - ] + if (enable_swiftshader_vulkan) { + # Vulkan Swiftshader can only be built on Linux. + # TODO(samans): Support more platforms. https://crbug.com/963988 + data_deps = [ + "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan", + ] + } }
diff --git a/headless/app/headless_shell_switches.cc b/headless/app/headless_shell_switches.cc index 6b2c5f4..c91c5fbc 100644 --- a/headless/app/headless_shell_switches.cc +++ b/headless/app/headless_shell_switches.cc
@@ -22,6 +22,11 @@ // Enable crash reporter for headless. const char kEnableCrashReporter[] = "enable-crash-reporter"; +// If enabled, generate a tagged (accessible) file when printing to PDF. +// The plan is for this to go away once tagged PDFs become the default. +// See https://crbug.com/607777 +const char kExportTaggedPDF[] = "export-tagged-pdf"; + // Disable crash reporter for headless. It is enabled by default in official // builds. const char kDisableCrashReporter[] = "disable-crash-reporter";
diff --git a/headless/app/headless_shell_switches.h b/headless/app/headless_shell_switches.h index 1e69ba64..aeb3a14 100644 --- a/headless/app/headless_shell_switches.h +++ b/headless/app/headless_shell_switches.h
@@ -20,6 +20,7 @@ HEADLESS_EXPORT extern const char kDumpDom[]; HEADLESS_EXPORT extern const char kEnableBeginFrameControl[]; HEADLESS_EXPORT extern const char kEnableCrashReporter[]; +HEADLESS_EXPORT extern const char kExportTaggedPDF[]; HEADLESS_EXPORT extern const char kHideScrollbars[]; HEADLESS_EXPORT extern const char kPasswordStore[]; HEADLESS_EXPORT extern const char kPrintToPDF[];
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc index aac5672..3612acbb 100644 --- a/headless/lib/browser/headless_content_browser_client.cc +++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -190,6 +190,9 @@ command_line->AppendSwitch(::switches::kEnableCrashReporter); #endif // defined(HEADLESS_USE_BREAKPAD) + if (old_command_line.HasSwitch(switches::kExportTaggedPDF)) + command_line->AppendSwitch(switches::kExportTaggedPDF); + // If we're spawning a renderer, then override the language switch. std::string process_type = command_line->GetSwitchValueASCII(::switches::kProcessType);
diff --git a/headless/lib/renderer/headless_print_render_frame_helper_delegate.cc b/headless/lib/renderer/headless_print_render_frame_helper_delegate.cc index 7d8ab3f3..253e685 100644 --- a/headless/lib/renderer/headless_print_render_frame_helper_delegate.cc +++ b/headless/lib/renderer/headless_print_render_frame_helper_delegate.cc
@@ -3,6 +3,8 @@ // found in the LICENSE file. #include "headless/lib/renderer/headless_print_render_frame_helper_delegate.h" +#include "base/command_line.h" +#include "headless/app/headless_shell_switches.h" #include "third_party/blink/public/web/web_element.h" @@ -23,6 +25,11 @@ return false; } +bool HeadlessPrintRenderFrameHelperDelegate::ShouldGenerateTaggedPDF() { + return base::CommandLine::ForCurrentProcess()->HasSwitch( + headless::switches::kExportTaggedPDF); +} + bool HeadlessPrintRenderFrameHelperDelegate::OverridePrint( blink::WebLocalFrame* frame) { return false;
diff --git a/headless/lib/renderer/headless_print_render_frame_helper_delegate.h b/headless/lib/renderer/headless_print_render_frame_helper_delegate.h index c5c070d..707e849 100644 --- a/headless/lib/renderer/headless_print_render_frame_helper_delegate.h +++ b/headless/lib/renderer/headless_print_render_frame_helper_delegate.h
@@ -19,6 +19,7 @@ private: // printing::PrintRenderFrameHelper::Delegate: bool IsPrintPreviewEnabled() override; + bool ShouldGenerateTaggedPDF() override; bool OverridePrint(blink::WebLocalFrame* frame) override; blink::WebElement GetPdfElement(blink::WebLocalFrame* frame) override;
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h index 5dfa75c..ef3d0129 100644 --- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h +++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
@@ -111,6 +111,8 @@ InfobarAcceptanceObserver infobar_accept_observer_; // The infobar manager observer. InfobarManagerObserver infobar_manager_observer_; + // The WebState this TabHelper is scoped to. + web::WebState* web_state_; // Map storing the badge models for each InfobarType. std::map<InfobarType, InfobarBadgeModel*> infobar_badge_models_;
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm index 7ca81b4b..bf10263e 100644 --- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm +++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
@@ -31,7 +31,8 @@ InfobarBadgeTabHelper::InfobarBadgeTabHelper(web::WebState* web_state) : infobar_accept_observer_(this), - infobar_manager_observer_(this, web_state, &infobar_accept_observer_) {} + infobar_manager_observer_(this, web_state, &infobar_accept_observer_), + web_state_(web_state) {} InfobarBadgeTabHelper::~InfobarBadgeTabHelper() = default; @@ -55,13 +56,15 @@ void InfobarBadgeTabHelper::UpdateBadgeForInfobarBannerPresented( InfobarType infobar_type) { infobar_badge_models_[infobar_type].badgeState |= BadgeStatePresented; - [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]]; + [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type] + forWebState:web_state_]; } void InfobarBadgeTabHelper::UpdateBadgeForInfobarBannerDismissed( InfobarType infobar_type) { infobar_badge_models_[infobar_type].badgeState &= ~BadgeStatePresented; - [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]]; + [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type] + forWebState:web_state_]; } NSArray<id<BadgeItem>>* InfobarBadgeTabHelper::GetInfobarBadgeItems() { @@ -81,14 +84,14 @@ InfobarBadgeModel* new_badge = [[InfobarBadgeModel alloc] initWithInfobarType:infobar_type]; infobar_badge_models_[infobar_type] = new_badge; - [delegate_ addInfobarBadge:new_badge]; + [delegate_ addInfobarBadge:new_badge forWebState:web_state_]; } void InfobarBadgeTabHelper::ResetStateForRemovedInfobar( InfobarType infobar_type) { InfobarBadgeModel* removed_badge = infobar_badge_models_[infobar_type]; infobar_badge_models_[infobar_type] = nil; - [delegate_ removeInfobarBadge:removed_badge]; + [delegate_ removeInfobarBadge:removed_badge forWebState:web_state_]; } void InfobarBadgeTabHelper::OnInfobarAcceptanceStateChanged( @@ -100,7 +103,7 @@ } else { item.badgeState &= ~BadgeStateAccepted; } - [delegate_ updateInfobarBadge:item]; + [delegate_ updateInfobarBadge:item forWebState:web_state_]; } #pragma mark - InfobarBadgeTabHelper::InfobarAcceptanceObserver
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h b/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h index d08b595..64bfb589 100644 --- a/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h +++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h
@@ -9,15 +9,24 @@ @protocol BadgeItem; +namespace web { +class WebState; +} + // Delegate used by InfobarBadgeTabHelper to manage the Infobar badges. @protocol InfobarBadgeTabHelperDelegate -// Asks the delegate to add a badge with the configuration of |badgeItem|. -- (void)addInfobarBadge:(id<BadgeItem>)badgeItem; -// Asks the delegate to remove a badge matching the badgeType of |badgeItem|. -- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem; -// Asks the delegate to update the configuration of |badgeItem|. -- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem; +// Asks the delegate to add a badge with the configuration of |badgeItem| for +// |webState|. +- (void)addInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState; +// Asks the delegate to remove a badge matching the badgeType of |badgeItem| for +// |webState|. +- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState; +// Asks the delegate to update the configuration of |badgeItem| for |webState|. +- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState; @end
diff --git a/ios/chrome/browser/infobars/test/fake_infobar_badge_tab_helper_delegate.mm b/ios/chrome/browser/infobars/test/fake_infobar_badge_tab_helper_delegate.mm index f41d626f..24083c12 100644 --- a/ios/chrome/browser/infobars/test/fake_infobar_badge_tab_helper_delegate.mm +++ b/ios/chrome/browser/infobars/test/fake_infobar_badge_tab_helper_delegate.mm
@@ -27,15 +27,18 @@ #pragma mark - InfobarBadgeTabHelperDelegate -- (void)addInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)addInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { _badgeItems[badgeItem.badgeType] = badgeItem; } -- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { _badgeItems[badgeItem.badgeType] = nil; } -- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { } @end
diff --git a/ios/chrome/browser/ui/badges/badge_mediator.mm b/ios/chrome/browser/ui/badges/badge_mediator.mm index 0cfaada..888eb43 100644 --- a/ios/chrome/browser/ui/badges/badge_mediator.mm +++ b/ios/chrome/browser/ui/badges/badge_mediator.mm
@@ -242,12 +242,24 @@ #pragma mark - InfobarBadgeTabHelperDelegate -- (void)addInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)addInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { + if (webState != self.webStateList->GetActiveWebState()) { + // Don't add badge if |badgeItem| is not coming from the currently active + // WebState. + return; + } [self.badges addObject:badgeItem]; [self updateBadgesShown]; } -- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { + if (webState != self.webStateList->GetActiveWebState()) { + // Don't remove badge if |badgeItem| is not coming from the currently active + // WebState. + return; + } for (id<BadgeItem> item in self.badges) { if (item.badgeType == badgeItem.badgeType) { [self.badges removeObject:item]; @@ -257,7 +269,13 @@ } } -- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem { +- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem + forWebState:(web::WebState*)webState { + if (webState != self.webStateList->GetActiveWebState()) { + // Don't update badge if |badgeItem| is not coming from the currently active + // WebState. + return; + } for (id<BadgeItem> item in self.badges) { if (item.badgeType == badgeItem.badgeType) { item.badgeState = badgeItem.badgeState;
diff --git a/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm b/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm index 8aea99c7..b4eda88 100644 --- a/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm +++ b/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm
@@ -217,6 +217,23 @@ EXPECT_FALSE(badge_consumer_.displayedBadge); } +// Test that the BadgeMediator does not inform its consumer of a new infobar if +// the added infobar came from an inactive WebState. +TEST_P(BadgeMediatorTest, + BadgeMediatorTestSwitchWebStateAndAddInfobarToInactiveWebState) { + InsertActivatedWebState(/*index=*/0); + AddInfobar(kFirstInfobarType); + ASSERT_TRUE(badge_consumer_.displayedBadge); + EXPECT_EQ(badge_consumer_.displayedBadge.badgeType, + BadgeType::kBadgeTypePasswordSave); + InsertActivatedWebState(/*index=*/1); + std::unique_ptr<InfoBarIOS> added_infobar = + FakeInfobarIOS::Create(kSecondInfobarType, /*has_badge=*/true); + InfoBarManagerImpl::FromWebState(web_state_list_.GetWebStateAt(0)) + ->AddInfoBar(std::move(added_infobar)); + EXPECT_FALSE(badge_consumer_.displayedBadge); +} + // Test that the BadgeMediator updates the badge when it is accepted. TEST_P(BadgeMediatorTest, BadgeMediatorTestAcceptedBadge) { InsertActivatedWebState(/*index=*/0);
diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn index 735af1f..8d514c8 100644 --- a/media/base/BUILD.gn +++ b/media/base/BUILD.gn
@@ -588,6 +588,14 @@ if (is_linux || is_win) { sources += [ "keyboard_event_counter_unittest.cc" ] } + if (is_win) { + sources += [ "win/dxgi_device_scope_handle_unittest.cc" ] + deps += [ "//media/base/win:media_foundation_util" ] + libs = [ + "d3d11.lib", + "mfplat.lib", + ] + } } source_set("perftests") {
diff --git a/media/base/win/dxgi_device_scope_handle_unittest.cc b/media/base/win/dxgi_device_scope_handle_unittest.cc new file mode 100644 index 0000000..a5fc44d3 --- /dev/null +++ b/media/base/win/dxgi_device_scope_handle_unittest.cc
@@ -0,0 +1,78 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <d3d11.h> +#include <mfapi.h> + +#include "media/base/test_helpers.h" +#include "media/base/win/mf_helpers.h" +#include "media/base/win/mf_initializer.h" + +namespace media { + +using Microsoft::WRL::ComPtr; + +class DXGIDeviceScopedHandleTest : public testing::Test { + public: + DXGIDeviceScopedHandleTest() = default; + ~DXGIDeviceScopedHandleTest() override = default; + + protected: + void SetUp() override { + ASSERT_TRUE(InitializeMediaFoundation()); + + // Get a shared DXGI Device Manager from Media Foundation. + ASSERT_HRESULT_SUCCEEDED( + MFLockDXGIDeviceManager(&device_reset_token_, &dxgi_device_man_)); + + // |dxgi_device_man_| does not create the device, creates Direct3D device. + ComPtr<ID3D11Device> d3d11_device; + UINT creation_flags = + (D3D11_CREATE_DEVICE_VIDEO_SUPPORT | D3D11_CREATE_DEVICE_BGRA_SUPPORT | + D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS); + static const D3D_FEATURE_LEVEL feature_levels[] = { + D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, + D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, + D3D_FEATURE_LEVEL_9_1}; + ASSERT_HRESULT_SUCCEEDED( + D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, 0, creation_flags, + feature_levels, ARRAYSIZE(feature_levels), + D3D11_SDK_VERSION, &d3d11_device, nullptr, nullptr)); + + ComPtr<ID3D10Multithread> multithreaded_device; + ASSERT_HRESULT_SUCCEEDED(d3d11_device.As(&multithreaded_device)); + multithreaded_device->SetMultithreadProtected(TRUE); + + // Set Direct3D device to the device manager. + ASSERT_HRESULT_SUCCEEDED( + dxgi_device_man_->ResetDevice(d3d11_device.Get(), device_reset_token_)); + } + + void TearDown() override { + ASSERT_HRESULT_SUCCEEDED(MFUnlockDXGIDeviceManager()); + } + + Microsoft::WRL::ComPtr<IMFDXGIDeviceManager> dxgi_device_man_ = nullptr; + UINT device_reset_token_ = 0; +}; + +TEST_F(DXGIDeviceScopedHandleTest, UseDXGIDeviceScopedHandle) { + { + // Create DXGIDeviceScopedHandle in an inner scope without LockDevice call. + mf::DXGIDeviceScopedHandle device_handle_1(dxgi_device_man_.Get()); + } + { + // Create DXGIDeviceScopedHandle in an inner scope with LockDevice call. + mf::DXGIDeviceScopedHandle device_handle_2(dxgi_device_man_.Get()); + ComPtr<ID3D11Device> device2; + ASSERT_HRESULT_SUCCEEDED( + device_handle_2.LockDevice(IID_PPV_ARGS(&device2))); + } + // Use the device in an outer scope. + mf::DXGIDeviceScopedHandle device_handle_3(dxgi_device_man_.Get()); + ComPtr<ID3D11Device> device3; + ASSERT_HRESULT_SUCCEEDED(device_handle_3.LockDevice(IID_PPV_ARGS(&device3))); +} + +} // namespace media \ No newline at end of file
diff --git a/media/base/win/mf_helpers.cc b/media/base/win/mf_helpers.cc index cb331bb44..f1e770e 100644 --- a/media/base/win/mf_helpers.cc +++ b/media/base/win/mf_helpers.cc
@@ -60,6 +60,34 @@ CHECK(SUCCEEDED(hr)); } +DXGIDeviceScopedHandle::DXGIDeviceScopedHandle( + IMFDXGIDeviceManager* device_manager) + : device_manager_(device_manager) {} + +DXGIDeviceScopedHandle::~DXGIDeviceScopedHandle() { + if (device_handle_ != INVALID_HANDLE_VALUE) { + HRESULT hr = device_manager_->CloseDeviceHandle(device_handle_); + CHECK(SUCCEEDED(hr)); + device_handle_ = INVALID_HANDLE_VALUE; + } +} + +HRESULT DXGIDeviceScopedHandle::LockDevice(REFIID riid, void** device_out) { + HRESULT hr; + if (device_handle_ == INVALID_HANDLE_VALUE) { + hr = device_manager_->OpenDeviceHandle(&device_handle_); + if (FAILED(hr)) { + return hr; + } + } + // see + // https://docs.microsoft.com/en-us/windows/win32/api/mfobjects/nf-mfobjects-imfdxgidevicemanager-lockdevice + // for details of LockDevice call. + hr = device_manager_->LockDevice(device_handle_, riid, device_out, + /*block=*/FALSE); + return hr; +} + } // namespace mf } // namespace media
diff --git a/media/base/win/mf_helpers.h b/media/base/win/mf_helpers.h index 56b661d..3289b106 100644 --- a/media/base/win/mf_helpers.h +++ b/media/base/win/mf_helpers.h
@@ -71,6 +71,21 @@ DISALLOW_COPY_AND_ASSIGN(MediaBufferScopedPointer); }; +// Wrap around the usage of device handle from |device_manager|. +class MF_INITIALIZER_EXPORT DXGIDeviceScopedHandle { + public: + explicit DXGIDeviceScopedHandle(IMFDXGIDeviceManager* device_manager); + + ~DXGIDeviceScopedHandle(); + + HRESULT LockDevice(REFIID riid, void** device_out); + + private: + Microsoft::WRL::ComPtr<IMFDXGIDeviceManager> device_manager_; + + HANDLE device_handle_ = INVALID_HANDLE_VALUE; +}; + } // namespace mf } // namespace media
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h index 8e9a5be..847ee04f 100644 --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h
@@ -779,31 +779,31 @@ EXPECT_TRUE(this->SetCookie(cs, url1, "foo")); EXPECT_EQ("foo", this->GetCookies(cs, url1)); - // Regression tests for https://crbug.com/601786 + // Cookies with neither name nor value (e.g. `Set-Cookie: =`) are ignored. GURL url2("http://foo2.bar.com"); EXPECT_TRUE(this->SetCookie(cs, url2, "foo")); - EXPECT_TRUE(this->SetCookie(cs, url2, "\t")); - EXPECT_EQ("", this->GetCookies(cs, url2)); + EXPECT_FALSE(this->SetCookie(cs, url2, "\t")); + EXPECT_EQ("foo", this->GetCookies(cs, url2)); GURL url3("http://foo3.bar.com"); EXPECT_TRUE(this->SetCookie(cs, url3, "foo")); - EXPECT_TRUE(this->SetCookie(cs, url3, "=")); - EXPECT_EQ("", this->GetCookies(cs, url3)); + EXPECT_FALSE(this->SetCookie(cs, url3, "=")); + EXPECT_EQ("foo", this->GetCookies(cs, url3)); GURL url4("http://foo4.bar.com"); EXPECT_TRUE(this->SetCookie(cs, url4, "foo")); - EXPECT_TRUE(this->SetCookie(cs, url4, "")); - EXPECT_EQ("", this->GetCookies(cs, url4)); + EXPECT_FALSE(this->SetCookie(cs, url4, "")); + EXPECT_EQ("foo", this->GetCookies(cs, url4)); GURL url5("http://foo5.bar.com"); EXPECT_TRUE(this->SetCookie(cs, url5, "foo")); - EXPECT_TRUE(this->SetCookie(cs, url5, "; bar")); - EXPECT_EQ("", this->GetCookies(cs, url5)); + EXPECT_FALSE(this->SetCookie(cs, url5, "; bar")); + EXPECT_EQ("foo", this->GetCookies(cs, url5)); GURL url6("http://foo6.bar.com"); EXPECT_TRUE(this->SetCookie(cs, url6, "foo")); - EXPECT_TRUE(this->SetCookie(cs, url6, " ")); - EXPECT_EQ("", this->GetCookies(cs, url6)); + EXPECT_FALSE(this->SetCookie(cs, url6, " ")); + EXPECT_EQ("foo", this->GetCookies(cs, url6)); #endif }
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc index ebb3cd6..5f48629 100644 --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc
@@ -104,10 +104,10 @@ const base::Optional<url::Origin>& initiator) { if (site_for_cookies.IsFirstParty(url)) { CookieOptions::SameSiteCookieContext same_site_type; + // Create a SiteForCookies object from the initiator so that we can reuse + // IsFirstParty(). if (!initiator || - registry_controlled_domains::SameDomainOrHost( - url, initiator.value(), - registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { + SiteForCookies::FromOrigin(initiator.value()).IsFirstParty(url)) { same_site_type = CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT; } else { same_site_type = CookieOptions::SameSiteCookieContext::SAME_SITE_LAX;
diff --git a/net/cookies/parsed_cookie.cc b/net/cookies/parsed_cookie.cc index 810343e..64e5ea6e 100644 --- a/net/cookies/parsed_cookie.cc +++ b/net/cookies/parsed_cookie.cc
@@ -361,13 +361,9 @@ // Then we can log any unexpected terminators. std::string::const_iterator end = FindFirstTerminator(cookie_line); - // For an empty |cookie_line|, add an empty-key with an empty value, which - // has the effect of clearing any prior setting of the empty-key. This is done - // to match the behavior of other browsers. See https://crbug.com/601786. - if (it == end) { - pairs_.push_back(TokenValuePair("", "")); + // Exit early for an empty cookie string. + if (it == end) return; - } for (int pair_num = 0; it != end; ++pair_num) { TokenValuePair pair; @@ -412,9 +408,16 @@ // OK, we're finished with a Token/Value. pair.second = std::string(value_start, value_end); + // Ignore cookies with neither name nor value. + if (pair_num == 0 && (pair.first.empty() && pair.second.empty())) { + pairs_.clear(); + break; + } + // From RFC2109: "Attributes (names) (attr) are case-insensitive." if (pair_num != 0) pair.first = base::ToLowerASCII(pair.first); + // Ignore Set-Cookie directives contaning control characters. See // http://crbug.com/238041. if (!IsValidCookieAttributeValue(pair.first) ||
diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc index d2f6b73..72dbc994 100644 --- a/net/cookies/parsed_cookie_unittest.cc +++ b/net/cookies/parsed_cookie_unittest.cc
@@ -18,28 +18,14 @@ EXPECT_EQ("b", pc.Value()); } -// De facto standard behavior, per https://crbug.com/601786. TEST(ParsedCookieTest, TestEmpty) { - const struct { - const char* cookie; - const char* expected_path; - bool expect_secure; - } kTestCookieLines[]{{"", "", false}, {" ", "", false}, - {"=;", "", false}, {"=; path=/; secure;", "/", true}, - {"= ;", "", false}, {"= ; path=/; secure;", "/", true}, - {" =;", "", false}, {" =; path=/; secure;", "/", true}, - {" = ;", "", false}, {" = ; path=/; secure;", "/", true}, - {" ;", "", false}, {" ; path=/; secure;", "/", true}, - {";", "", false}, {"; path=/; secure;", "/", true}, - {"\t;", "", false}, {"\t; path=/; secure;", "/", true}}; + const char* kTestCookieLines[]{"", " ", "=", "=;", " =;", + "= ;", " = ;", ";", " ;", " ; ", + "\t", "\t;", "\t=\t", "\t=", "=\t"}; - for (const auto& test : kTestCookieLines) { - ParsedCookie pc(test.cookie); - EXPECT_TRUE(pc.IsValid()); - EXPECT_EQ("", pc.Name()); - EXPECT_EQ("", pc.Value()); - EXPECT_EQ(test.expected_path, pc.Path()); - EXPECT_EQ(test.expect_secure, pc.IsSecure()); + for (const char* test : kTestCookieLines) { + ParsedCookie pc(test); + EXPECT_FALSE(pc.IsValid()); } } @@ -284,13 +270,13 @@ } TEST(ParsedCookieTest, SetNameAndValue) { - ParsedCookie empty((std::string())); - EXPECT_TRUE(empty.IsValid()); - EXPECT_TRUE(empty.SetDomain("foobar.com")); - EXPECT_TRUE(empty.SetName("name")); - EXPECT_TRUE(empty.SetValue("value")); - EXPECT_EQ("name=value; domain=foobar.com", empty.ToCookieLine()); - EXPECT_TRUE(empty.IsValid()); + ParsedCookie cookie("a=b"); + EXPECT_TRUE(cookie.IsValid()); + EXPECT_TRUE(cookie.SetDomain("foobar.com")); + EXPECT_TRUE(cookie.SetName("name")); + EXPECT_TRUE(cookie.SetValue("value")); + EXPECT_EQ("name=value; domain=foobar.com", cookie.ToCookieLine()); + EXPECT_TRUE(cookie.IsValid()); // We don't test // ParsedCookie invalid("@foo=bar");
diff --git a/net/quic/quic_test_packet_maker.cc b/net/quic/quic_test_packet_maker.cc index 22e5150d..79b932f 100644 --- a/net/quic/quic_test_packet_maker.cc +++ b/net/quic/quic_test_packet_maker.cc
@@ -206,6 +206,27 @@ return BuildPacket(); } +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakeStreamsBlockedPacket( + uint64_t num, + bool include_version, + quic::QuicStreamCount stream_count, + bool unidirectional) { + InitializeHeader(num, include_version); + AddQuicStreamsBlockedFrame(1, stream_count, unidirectional); + return BuildPacket(); +} + +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakeMaxStreamsPacket(uint64_t num, + bool include_version, + quic::QuicStreamCount stream_count, + bool unidirectional) { + InitializeHeader(num, include_version); + AddQuicMaxStreamsFrame(1, stream_count, unidirectional); + return BuildPacket(); +} + std::unique_ptr<quic::QuicReceivedPacket> QuicTestPacketMaker::MakeRstPacket( uint64_t num, bool include_version, @@ -237,27 +258,6 @@ } std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakeStreamsBlockedPacket( - uint64_t num, - bool include_version, - quic::QuicStreamCount stream_count, - bool unidirectional) { - InitializeHeader(num, include_version); - AddQuicStreamsBlockedFrame(1, stream_count, unidirectional); - return BuildPacket(); -} - -std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakeMaxStreamsPacket(uint64_t num, - bool include_version, - quic::QuicStreamCount stream_count, - bool unidirectional) { - InitializeHeader(num, include_version); - AddQuicMaxStreamsFrame(1, stream_count, unidirectional); - return BuildPacket(); -} - -std::unique_ptr<quic::QuicReceivedPacket> QuicTestPacketMaker::MakeRstAndDataPacket( uint64_t num, bool include_version, @@ -665,28 +665,6 @@ return BuildPacket(); } -spdy::SpdySerializedFrame QuicTestPacketMaker::MakeSpdyHeadersFrame( - quic::QuicStreamId stream_id, - bool fin, - spdy::SpdyPriority priority, - spdy::SpdyHeaderBlock headers, - quic::QuicStreamId parent_stream_id) { - spdy::SpdyHeadersIR headers_frame(stream_id, std::move(headers)); - headers_frame.set_fin(fin); - headers_frame.set_weight(spdy::Spdy3PriorityToHttp2Weight(priority)); - headers_frame.set_has_priority(true); - - if (client_headers_include_h2_stream_dependency_) { - headers_frame.set_parent_stream_id(parent_stream_id); - headers_frame.set_exclusive(true); - } else { - headers_frame.set_parent_stream_id(0); - headers_frame.set_exclusive(false); - } - - return spdy_request_framer_.SerializeFrame(headers_frame); -} - std::unique_ptr<quic::QuicReceivedPacket> QuicTestPacketMaker::MakePushPromisePacket( uint64_t packet_number, @@ -730,8 +708,6 @@ return BuildPacket(); } -// If |offset| is provided, will use the value when creating the packet. -// Will also update the value after packet creation. std::unique_ptr<quic::QuicReceivedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( uint64_t packet_number, @@ -766,6 +742,149 @@ return BuildPacket(); } +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) { + InitializeHeader(packet_number, /*should_include_version*/ true); + + if (!quic::VersionUsesHttp3(version_.transport_version)) { + spdy::SpdySettingsIR settings_frame; + settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE, + kQuicMaxHeaderListSize); + settings_frame.AddSetting(quic::SETTINGS_QPACK_BLOCKED_STREAMS, + quic::kDefaultMaximumBlockedStreams); + spdy::SpdySerializedFrame spdy_frame( + spdy_request_framer_.SerializeFrame(settings_frame)); + AddQuicStreamFrame( + GetHeadersStreamId(), false, + quiche::QuicheStringPiece(spdy_frame.data(), spdy_frame.size())); + return BuildPacket(); + } + + MaybeAddHttp3SettingsFrames(); + + return BuildPacket(); +} + +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakePriorityPacket(uint64_t packet_number, + bool should_include_version, + quic::QuicStreamId id, + quic::QuicStreamId parent_stream_id, + spdy::SpdyPriority priority) { + InitializeHeader(packet_number, should_include_version); + + if (!client_headers_include_h2_stream_dependency_ || + quic::VersionUsesHttp3(version_.transport_version)) { + // TODO(rch): both stream_dependencies and priority frames need to be + // supported in IETF QUIC. + parent_stream_id = 0; + } + int weight = spdy::Spdy3PriorityToHttp2Weight(priority); + bool exclusive = client_headers_include_h2_stream_dependency_; + + if (!VersionUsesHttp3(version_.transport_version)) { + spdy::SpdyPriorityIR priority_frame(id, parent_stream_id, weight, + exclusive); + spdy::SpdySerializedFrame spdy_frame( + spdy_request_framer_.SerializeFrame(priority_frame)); + AddQuicStreamFrame( + GetHeadersStreamId(), false, + quiche::QuicheStringPiece(spdy_frame.data(), spdy_frame.size())); + + return BuildPacket(); + } + + quic::PriorityFrame frame; + frame.weight = weight; + frame.exclusive = true; + frame.prioritized_element_id = id; + frame.element_dependency_id = parent_stream_id; + frame.dependency_type = quic::REQUEST_STREAM; + frame.prioritized_type = + quic::QuicUtils::IsServerInitiatedStreamId(version_.transport_version, id) + ? quic::PUSH_STREAM + : quic::REQUEST_STREAM; + std::unique_ptr<char[]> buffer; + quic::QuicByteCount frame_length = + quic::HttpEncoder::SerializePriorityFrame(frame, &buffer); + std::string priority_data = std::string(buffer.get(), frame_length); + AddQuicStreamFrame(2, false, priority_data); + + return BuildPacket(); +} + +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakeAckAndMultiplePriorityFramesPacket( + uint64_t packet_number, + bool should_include_version, + uint64_t largest_received, + uint64_t smallest_received, + uint64_t least_unacked, + const std::vector<Http2StreamDependency>& priority_frames) { + InitializeHeader(packet_number, should_include_version); + + AddQuicAckFrame(largest_received, smallest_received); + + const bool exclusive = client_headers_include_h2_stream_dependency_; + std::string coalesced_data; + for (const Http2StreamDependency& info : priority_frames) { + spdy::SpdyPriorityIR priority_frame( + info.stream_id, info.parent_stream_id, + spdy::Spdy3PriorityToHttp2Weight(info.spdy_priority), exclusive); + auto spdy_frame = spdy_request_framer_.SerializeFrame(priority_frame); + coalesced_data += std::string(spdy_frame.data(), spdy_frame.size()); + } + AddQuicStreamFrame(quic::VersionUsesHttp3(version_.transport_version) + ? GetFirstBidirectionalStreamId() + : GetHeadersStreamId(), + false, coalesced_data); + + return BuildPacket(); +} + +std::unique_ptr<quic::QuicReceivedPacket> +QuicTestPacketMaker::MakeRetransmissionPacket(uint64_t original_packet_number, + uint64_t new_packet_number, + bool should_include_version) { + DCHECK(save_packet_frames_); + InitializeHeader(new_packet_number, should_include_version); + return BuildPacketImpl( + saved_frames_[quic::QuicPacketNumber(original_packet_number)], nullptr); +} + +void QuicTestPacketMaker::RemoveSavedStreamFrames( + quic::QuicStreamId stream_id) { + for (auto& kv : saved_frames_) { + auto it = kv.second.begin(); + while (it != kv.second.end()) { + if (it->type == quic::STREAM_FRAME && + it->stream_frame.stream_id == stream_id) { + it = kv.second.erase(it); + } else { + ++it; + } + } + } +} + +void QuicTestPacketMaker::SetEncryptionLevel(quic::EncryptionLevel level) { + encryption_level_ = level; + switch (level) { + case quic::ENCRYPTION_INITIAL: + long_header_type_ = quic::INITIAL; + break; + case quic::ENCRYPTION_ZERO_RTT: + long_header_type_ = quic::ZERO_RTT_PROTECTED; + break; + case quic::ENCRYPTION_FORWARD_SECURE: + long_header_type_ = quic::INVALID_PACKET_TYPE; + break; + default: + QUIC_BUG << quic::EncryptionLevelToString(level); + long_header_type_ = quic::INVALID_PACKET_TYPE; + } +} + spdy::SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( const std::string& method, const std::string& scheme, @@ -804,6 +923,70 @@ return headers; } +void QuicTestPacketMaker::Reset() { + stream_offsets_.clear(); +} + +std::string QuicTestPacketMaker::QpackEncodeHeaders( + quic::QuicStreamId stream_id, + spdy::SpdyHeaderBlock headers, + size_t* encoded_data_length) { + DCHECK(quic::VersionUsesHttp3(version_.transport_version)); + std::string data; + + std::string encoded_headers = + qpack_encoder_.EncodeHeaderList(stream_id, headers, nullptr); + + // Generate HEADERS frame header. + std::unique_ptr<char[]> headers_frame_header; + const size_t headers_frame_header_length = + quic::HttpEncoder::SerializeHeadersFrameHeader(encoded_headers.size(), + &headers_frame_header); + + // Possible add a PUSH stream type. + if (!quic::QuicUtils::IsBidirectionalStreamId(stream_id) && + stream_offsets_[stream_id] == 0) { + // Push stream type header + data += "\x01"; + } + + // Add the HEADERS frame header. + data += std::string(headers_frame_header.get(), headers_frame_header_length); + // Add the HEADERS frame payload. + data += encoded_headers; + + // Compute the total data length. + if (encoded_data_length) { + *encoded_data_length = data.length(); + } + return data; +} + +void QuicTestPacketMaker::InitializeHeader(uint64_t packet_number, + bool should_include_version) { + header_.destination_connection_id = DestinationConnectionId(); + header_.destination_connection_id_included = HasDestinationConnectionId(); + header_.source_connection_id = SourceConnectionId(); + header_.source_connection_id_included = HasSourceConnectionId(); + header_.reset_flag = false; + header_.version_flag = ShouldIncludeVersion(should_include_version); + if (quic::VersionHasIetfInvariantHeader(version_.transport_version)) { + header_.form = header_.version_flag ? quic::IETF_QUIC_LONG_HEADER_PACKET + : quic::IETF_QUIC_SHORT_HEADER_PACKET; + } + header_.long_packet_type = long_header_type_; + header_.packet_number_length = GetPacketNumberLength(); + header_.packet_number = quic::QuicPacketNumber(packet_number); + if (quic::QuicVersionHasLongHeaderLengths(version_.transport_version) && + header_.version_flag) { + if (long_header_type_ == quic::INITIAL) { + header_.retry_token_length_length = + quic::VARIABLE_LENGTH_INTEGER_LENGTH_1; + } + header_.length_length = quic::VARIABLE_LENGTH_INTEGER_LENGTH_2; + } +} + void QuicTestPacketMaker::AddQuicPaddingFrame() { quic::QuicPaddingFrame padding_frame; frames_.push_back(quic::QuicFrame(padding_frame)); @@ -1022,172 +1205,26 @@ return encrypted.Clone(); } -void QuicTestPacketMaker::InitializeHeader(uint64_t packet_number, - bool should_include_version) { - header_.destination_connection_id = DestinationConnectionId(); - header_.destination_connection_id_included = HasDestinationConnectionId(); - header_.source_connection_id = SourceConnectionId(); - header_.source_connection_id_included = HasSourceConnectionId(); - header_.reset_flag = false; - header_.version_flag = ShouldIncludeVersion(should_include_version); - if (quic::VersionHasIetfInvariantHeader(version_.transport_version)) { - header_.form = header_.version_flag ? quic::IETF_QUIC_LONG_HEADER_PACKET - : quic::IETF_QUIC_SHORT_HEADER_PACKET; - } - header_.long_packet_type = long_header_type_; - header_.packet_number_length = GetPacketNumberLength(); - header_.packet_number = quic::QuicPacketNumber(packet_number); - if (quic::QuicVersionHasLongHeaderLengths(version_.transport_version) && - header_.version_flag) { - if (long_header_type_ == quic::INITIAL) { - header_.retry_token_length_length = - quic::VARIABLE_LENGTH_INTEGER_LENGTH_1; - } - header_.length_length = quic::VARIABLE_LENGTH_INTEGER_LENGTH_2; - } -} +spdy::SpdySerializedFrame QuicTestPacketMaker::MakeSpdyHeadersFrame( + quic::QuicStreamId stream_id, + bool fin, + spdy::SpdyPriority priority, + spdy::SpdyHeaderBlock headers, + quic::QuicStreamId parent_stream_id) { + spdy::SpdyHeadersIR headers_frame(stream_id, std::move(headers)); + headers_frame.set_fin(fin); + headers_frame.set_weight(spdy::Spdy3PriorityToHttp2Weight(priority)); + headers_frame.set_has_priority(true); -std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) { - InitializeHeader(packet_number, /*should_include_version*/ true); - - if (!quic::VersionUsesHttp3(version_.transport_version)) { - spdy::SpdySettingsIR settings_frame; - settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE, - kQuicMaxHeaderListSize); - settings_frame.AddSetting(quic::SETTINGS_QPACK_BLOCKED_STREAMS, - quic::kDefaultMaximumBlockedStreams); - spdy::SpdySerializedFrame spdy_frame( - spdy_request_framer_.SerializeFrame(settings_frame)); - AddQuicStreamFrame( - GetHeadersStreamId(), false, - quiche::QuicheStringPiece(spdy_frame.data(), spdy_frame.size())); - return BuildPacket(); + if (client_headers_include_h2_stream_dependency_) { + headers_frame.set_parent_stream_id(parent_stream_id); + headers_frame.set_exclusive(true); + } else { + headers_frame.set_parent_stream_id(0); + headers_frame.set_exclusive(false); } - MaybeAddHttp3SettingsFrames(); - - return BuildPacket(); -} - -std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakePriorityPacket(uint64_t packet_number, - bool should_include_version, - quic::QuicStreamId id, - quic::QuicStreamId parent_stream_id, - spdy::SpdyPriority priority) { - InitializeHeader(packet_number, should_include_version); - - if (!client_headers_include_h2_stream_dependency_ || - quic::VersionUsesHttp3(version_.transport_version)) { - // TODO(rch): both stream_dependencies and priority frames need to be - // supported in IETF QUIC. - parent_stream_id = 0; - } - int weight = spdy::Spdy3PriorityToHttp2Weight(priority); - bool exclusive = client_headers_include_h2_stream_dependency_; - - if (!VersionUsesHttp3(version_.transport_version)) { - spdy::SpdyPriorityIR priority_frame(id, parent_stream_id, weight, - exclusive); - spdy::SpdySerializedFrame spdy_frame( - spdy_request_framer_.SerializeFrame(priority_frame)); - AddQuicStreamFrame( - GetHeadersStreamId(), false, - quiche::QuicheStringPiece(spdy_frame.data(), spdy_frame.size())); - - return BuildPacket(); - } - - quic::PriorityFrame frame; - frame.weight = weight; - frame.exclusive = true; - frame.prioritized_element_id = id; - frame.element_dependency_id = parent_stream_id; - frame.dependency_type = quic::REQUEST_STREAM; - frame.prioritized_type = - quic::QuicUtils::IsServerInitiatedStreamId(version_.transport_version, id) - ? quic::PUSH_STREAM - : quic::REQUEST_STREAM; - std::unique_ptr<char[]> buffer; - quic::QuicByteCount frame_length = - quic::HttpEncoder::SerializePriorityFrame(frame, &buffer); - std::string priority_data = std::string(buffer.get(), frame_length); - AddQuicStreamFrame(2, false, priority_data); - - return BuildPacket(); -} - -std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakeAckAndMultiplePriorityFramesPacket( - uint64_t packet_number, - bool should_include_version, - uint64_t largest_received, - uint64_t smallest_received, - uint64_t least_unacked, - const std::vector<Http2StreamDependency>& priority_frames) { - InitializeHeader(packet_number, should_include_version); - - AddQuicAckFrame(largest_received, smallest_received); - - const bool exclusive = client_headers_include_h2_stream_dependency_; - std::string coalesced_data; - for (const Http2StreamDependency& info : priority_frames) { - spdy::SpdyPriorityIR priority_frame( - info.stream_id, info.parent_stream_id, - spdy::Spdy3PriorityToHttp2Weight(info.spdy_priority), exclusive); - auto spdy_frame = spdy_request_framer_.SerializeFrame(priority_frame); - coalesced_data += std::string(spdy_frame.data(), spdy_frame.size()); - } - AddQuicStreamFrame(quic::VersionUsesHttp3(version_.transport_version) - ? GetFirstBidirectionalStreamId() - : GetHeadersStreamId(), - false, coalesced_data); - - return BuildPacket(); -} - -std::unique_ptr<quic::QuicReceivedPacket> -QuicTestPacketMaker::MakeRetransmissionPacket(uint64_t original_packet_number, - uint64_t new_packet_number, - bool should_include_version) { - DCHECK(save_packet_frames_); - InitializeHeader(new_packet_number, should_include_version); - return BuildPacketImpl( - saved_frames_[quic::QuicPacketNumber(original_packet_number)], nullptr); -} - -void QuicTestPacketMaker::RemoveSavedStreamFrames( - quic::QuicStreamId stream_id) { - for (auto& kv : saved_frames_) { - auto it = kv.second.begin(); - while (it != kv.second.end()) { - if (it->type == quic::STREAM_FRAME && - it->stream_frame.stream_id == stream_id) { - it = kv.second.erase(it); - } else { - ++it; - } - } - } -} - -void QuicTestPacketMaker::SetEncryptionLevel(quic::EncryptionLevel level) { - encryption_level_ = level; - switch (level) { - case quic::ENCRYPTION_INITIAL: - long_header_type_ = quic::INITIAL; - break; - case quic::ENCRYPTION_ZERO_RTT: - long_header_type_ = quic::ZERO_RTT_PROTECTED; - break; - case quic::ENCRYPTION_FORWARD_SECURE: - long_header_type_ = quic::INVALID_PACKET_TYPE; - break; - default: - QUIC_BUG << quic::EncryptionLevelToString(level); - long_header_type_ = quic::INVALID_PACKET_TYPE; - } + return spdy_request_framer_.SerializeFrame(headers_frame); } bool QuicTestPacketMaker::ShouldIncludeVersion(bool include_version) const { @@ -1197,53 +1234,6 @@ return include_version; } -std::string QuicTestPacketMaker::MaybePrependErrorCode( - const std::string& quic_error_details, - quic::QuicErrorCode quic_error_code) const { - if (!quic::VersionHasIetfQuicFrames(version_.transport_version) || - quic_error_code == quic::QUIC_IETF_GQUIC_ERROR_MISSING) { - // QUIC_IETF_GQUIC_ERROR_MISSING means not to encode the error value. - return quic_error_details; - } - return base::StrCat( - {base::NumberToString(quic_error_code), ":", quic_error_details}); -} - -std::string QuicTestPacketMaker::QpackEncodeHeaders( - quic::QuicStreamId stream_id, - spdy::SpdyHeaderBlock headers, - size_t* encoded_data_length) { - DCHECK(quic::VersionUsesHttp3(version_.transport_version)); - std::string data; - - std::string encoded_headers = - qpack_encoder_.EncodeHeaderList(stream_id, headers, nullptr); - - // Generate HEADERS frame header. - std::unique_ptr<char[]> headers_frame_header; - const size_t headers_frame_header_length = - quic::HttpEncoder::SerializeHeadersFrameHeader(encoded_headers.size(), - &headers_frame_header); - - // Possible add a PUSH stream type. - if (!quic::QuicUtils::IsBidirectionalStreamId(stream_id) && - stream_offsets_[stream_id] == 0) { - // Push stream type header - data += "\x01"; - } - - // Add the HEADERS frame header. - data += std::string(headers_frame_header.get(), headers_frame_header_length); - // Add the HEADERS frame payload. - data += encoded_headers; - - // Compute the total data length. - if (encoded_data_length) { - *encoded_data_length = data.length(); - } - return data; -} - quic::QuicPacketNumberLength QuicTestPacketMaker::GetPacketNumberLength() const { if (version_.transport_version > quic::QUIC_VERSION_43 && @@ -1287,10 +1277,6 @@ return quic::CONNECTION_ID_ABSENT; } -void QuicTestPacketMaker::Reset() { - stream_offsets_.clear(); -} - quic::QuicStreamId QuicTestPacketMaker::GetFirstBidirectionalStreamId() const { return quic::QuicUtils::GetFirstBidirectionalStreamId( version_.transport_version, perspective_);
diff --git a/net/quic/quic_test_packet_maker.h b/net/quic/quic_test_packet_maker.h index be29b0b..fd27253 100644 --- a/net/quic/quic_test_packet_maker.h +++ b/net/quic/quic_test_packet_maker.h
@@ -60,11 +60,14 @@ std::unique_ptr<quic::QuicReceivedPacket> MakeConnectivityProbingPacket( uint64_t num, bool include_version); + std::unique_ptr<quic::QuicReceivedPacket> MakePingPacket( uint64_t num, bool include_version); + std::unique_ptr<quic::QuicReceivedPacket> MakeDummyCHLOPacket( uint64_t packet_num); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckAndPingPacket( uint64_t num, bool include_version, @@ -122,6 +125,7 @@ uint64_t smallest_received, uint64_t least_unacked, bool send_feedback); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckAndRstPacket( uint64_t num, bool include_version, @@ -132,6 +136,7 @@ uint64_t least_unacked, bool send_feedback, bool include_stop_sending_if_v99); + std::unique_ptr<quic::QuicReceivedPacket> MakeRstAckAndConnectionClosePacket( uint64_t num, bool include_version, @@ -142,6 +147,7 @@ uint64_t least_unacked, quic::QuicErrorCode quic_error, const std::string& quic_error_details); + std::unique_ptr<quic::QuicReceivedPacket> MakeRstAndConnectionClosePacket( uint64_t num, bool include_version, @@ -149,6 +155,7 @@ quic::QuicRstStreamErrorCode error_code, quic::QuicErrorCode quic_error, const std::string& quic_error_details); + std::unique_ptr<quic::QuicReceivedPacket> MakeDataRstAndConnectionClosePacket( uint64_t num, bool include_version, @@ -158,6 +165,7 @@ quic::QuicRstStreamErrorCode error_code, quic::QuicErrorCode quic_error, const std::string& quic_error_details); + std::unique_ptr<quic::QuicReceivedPacket> MakeDataRstAckAndConnectionClosePacket( uint64_t num, @@ -171,6 +179,7 @@ uint64_t least_unacked, quic::QuicErrorCode quic_error, const std::string& quic_error_details); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckAndConnectionClosePacket( uint64_t num, bool include_version, @@ -180,21 +189,25 @@ quic::QuicErrorCode quic_error, const std::string& quic_error_details, uint64_t frame_type); + std::unique_ptr<quic::QuicReceivedPacket> MakeConnectionClosePacket( uint64_t num, bool include_version, quic::QuicErrorCode quic_error, const std::string& quic_error_details); + std::unique_ptr<quic::QuicReceivedPacket> MakeGoAwayPacket( uint64_t num, quic::QuicErrorCode error_code, std::string reason_phrase); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckPacket( uint64_t packet_number, uint64_t largest_received, uint64_t smallest_received, uint64_t least_unacked, bool send_feedback); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckPacket( uint64_t packet_number, uint64_t first_received, @@ -202,12 +215,14 @@ uint64_t smallest_received, uint64_t least_unacked, bool send_feedback); + std::unique_ptr<quic::QuicReceivedPacket> MakeDataPacket( uint64_t packet_number, quic::QuicStreamId stream_id, bool should_include_version, bool fin, quiche::QuicheStringPiece data); + std::unique_ptr<quic::QuicReceivedPacket> MakeAckAndDataPacket( uint64_t packet_number, bool include_version, @@ -335,6 +350,9 @@ size_t* encoded_data_length); private: + // Initialize header of next packet to build. + void InitializeHeader(uint64_t packet_number, bool should_include_version); + // Add frames to current packet. void AddQuicPaddingFrame(); void AddQuicPingFrame(); @@ -374,17 +392,15 @@ quic::QuicStreamOffset offset, quic::QuicPacketLength data_length); - // Build frame using |header_|, |frames_|, and |data_producer_|, + // Build packet using |header_|, |frames_|, and |data_producer_|, // and clear |frames_| and |data_producer_| afterwards. std::unique_ptr<quic::QuicReceivedPacket> BuildPacket(); - // Build frame using |header_|, |frames|, and |data_producer|. + // Build packet using |header_|, |frames|, and |data_producer|. std::unique_ptr<quic::QuicReceivedPacket> BuildPacketImpl( const quic::QuicFrames& frames, quic::QuicStreamFrameDataProducer* data_producer); - void InitializeHeader(uint64_t packet_number, bool should_include_version); - spdy::SpdySerializedFrame MakeSpdyHeadersFrame( quic::QuicStreamId stream_id, bool fin, @@ -394,11 +410,6 @@ bool ShouldIncludeVersion(bool include_version) const; - // This mirrors quic_framer.cc::{anonymous namespace}::GenerateErrorString() - // behavior. - std::string MaybePrependErrorCode(const std::string& quic_error_details, - quic::QuicErrorCode quic_error_code) const; - quic::QuicPacketNumberLength GetPacketNumberLength() const; quic::QuicConnectionId DestinationConnectionId() const;
diff --git a/printing/BUILD.gn b/printing/BUILD.gn index 89002848..1491e10 100644 --- a/printing/BUILD.gn +++ b/printing/BUILD.gn
@@ -117,6 +117,7 @@ "//printing/common", "//skia", "//third_party/icu", + "//ui/accessibility", "//ui/gfx", "//ui/gfx/geometry", "//url",
diff --git a/printing/DEPS b/printing/DEPS index 41732d72..71708c2 100644 --- a/printing/DEPS +++ b/printing/DEPS
@@ -5,6 +5,7 @@ "+third_party/icu/source/common/unicode", "+third_party/icu/source/i18n/unicode", "+third_party/skia", + "+ui/accessibility", "+ui/android", "+ui/aura", "+ui/base/resource",
diff --git a/printing/common/BUILD.gn b/printing/common/BUILD.gn index 4143ca72..029a42e5 100644 --- a/printing/common/BUILD.gn +++ b/printing/common/BUILD.gn
@@ -14,6 +14,7 @@ "//base", "//printing:printing_export", "//skia", + "//ui/accessibility", ] defines = [ "PRINTING_IMPLEMENTATION" ]
diff --git a/printing/common/metafile_utils.cc b/printing/common/metafile_utils.cc index eae01fb..24278c28 100644 --- a/printing/common/metafile_utils.cc +++ b/printing/common/metafile_utils.cc
@@ -11,6 +11,10 @@ #include "third_party/skia/include/core/SkPictureRecorder.h" #include "third_party/skia/include/core/SkTime.h" #include "third_party/skia/include/docs/SkPDFDocument.h" +#include "ui/accessibility/ax_node.h" +#include "ui/accessibility/ax_node_data.h" +#include "ui/accessibility/ax_tree.h" +#include "ui/accessibility/ax_tree_update.h" namespace { @@ -38,11 +42,94 @@ return rec.finishRecordingAsPicture(); } +// Convert an AXNode into a SkPDF::StructureElementNode in order to make a +// tagged (accessible) PDF. Returns true on success and false if we don't +// have enough data to build a valid tree. +bool RecursiveBuildStructureTree(const ui::AXNode* ax_node, + SkPDF::StructureElementNode* tag) { + bool valid = false; + + tag->fNodeId = ax_node->GetIntAttribute(ax::mojom::IntAttribute::kDOMNodeId); + switch (ax_node->data().role) { + case ax::mojom::Role::kRootWebArea: + tag->fType = SkPDF::DocumentStructureType::kDocument; + break; + case ax::mojom::Role::kParagraph: + tag->fType = SkPDF::DocumentStructureType::kP; + break; + case ax::mojom::Role::kGenericContainer: + tag->fType = SkPDF::DocumentStructureType::kDiv; + break; + case ax::mojom::Role::kHeading: + // TODO(dmazzoni): heading levels. https://crbug.com/1039816 + tag->fType = SkPDF::DocumentStructureType::kH; + break; + case ax::mojom::Role::kList: + tag->fType = SkPDF::DocumentStructureType::kL; + break; + case ax::mojom::Role::kListMarker: + tag->fType = SkPDF::DocumentStructureType::kLbl; + break; + case ax::mojom::Role::kListItem: + tag->fType = SkPDF::DocumentStructureType::kLI; + break; + case ax::mojom::Role::kTable: + tag->fType = SkPDF::DocumentStructureType::kTable; + break; + case ax::mojom::Role::kRow: + tag->fType = SkPDF::DocumentStructureType::kTR; + break; + case ax::mojom::Role::kColumnHeader: + case ax::mojom::Role::kRowHeader: + tag->fType = SkPDF::DocumentStructureType::kTH; + break; + case ax::mojom::Role::kCell: + tag->fType = SkPDF::DocumentStructureType::kTD; + break; + case ax::mojom::Role::kFigure: + case ax::mojom::Role::kImage: + tag->fType = SkPDF::DocumentStructureType::kFigure; + break; + case ax::mojom::Role::kStaticText: + // Currently we're only marking text content, so we can't generate + // a nonempty structure tree unless we have at least one kStaticText + // node in the tree. + tag->fType = SkPDF::DocumentStructureType::kNonStruct; + valid = true; + break; + default: + tag->fType = SkPDF::DocumentStructureType::kNonStruct; + } + + tag->fChildCount = ax_node->GetUnignoredChildCount(); + // Allocated here, cleaned up in DestroyStructureElementNodeTree(). + SkPDF::StructureElementNode* children = + new SkPDF::StructureElementNode[tag->fChildCount]; + tag->fChildren = children; + for (size_t i = 0; i < tag->fChildCount; i++) { + bool success = RecursiveBuildStructureTree( + ax_node->GetUnignoredChildAtIndex(i), &children[i]); + if (success) + valid = true; + } + + return valid; +} + +void DestroyStructureElementNodeTree(SkPDF::StructureElementNode* node) { + for (size_t i = 0; i < node->fChildCount; i++) { + DestroyStructureElementNodeTree( + const_cast<SkPDF::StructureElementNode*>(&node->fChildren[i])); + } + delete[] node->fChildren; +} + } // namespace namespace printing { sk_sp<SkDocument> MakePdfDocument(const std::string& creator, + const ui::AXTreeUpdate& accessibility_tree, SkWStream* stream) { SkPDF::Metadata metadata; SkTime::DateTime now = TimeToSkTime(base::Time::Now()); @@ -56,7 +143,17 @@ base::FeatureList::IsEnabled(printing::features::kHarfBuzzPDFSubsetter) ? SkPDF::Metadata::kHarfbuzz_Subsetter : SkPDF::Metadata::kSfntly_Subsetter; - return SkPDF::MakeDocument(stream, metadata); + + SkPDF::StructureElementNode tag_root = {}; + if (!accessibility_tree.nodes.empty()) { + ui::AXTree tree(accessibility_tree); + if (RecursiveBuildStructureTree(tree.root(), &tag_root)) + metadata.fStructureElementTreeRoot = &tag_root; + } + + sk_sp<SkDocument> document = SkPDF::MakeDocument(stream, metadata); + DestroyStructureElementNodeTree(&tag_root); + return document; } sk_sp<SkData> SerializeOopPicture(SkPicture* pic, void* ctx) {
diff --git a/printing/common/metafile_utils.h b/printing/common/metafile_utils.h index efda850..5796754 100644 --- a/printing/common/metafile_utils.h +++ b/printing/common/metafile_utils.h
@@ -14,6 +14,7 @@ #include "third_party/skia/include/core/SkRefCnt.h" #include "third_party/skia/include/core/SkSerialProcs.h" #include "third_party/skia/include/core/SkStream.h" +#include "ui/accessibility/ax_tree_update_forward.h" namespace printing { @@ -34,6 +35,7 @@ using SerializationContext = ContentToProxyIdMap; sk_sp<SkDocument> MakePdfDocument(const std::string& creator, + const ui::AXTreeUpdate& accessibility_tree, SkWStream* stream); SkSerialProcs SerializationProcs(SerializationContext* ctx);
diff --git a/printing/metafile_skia.cc b/printing/metafile_skia.cc index e14acb4..8e2a9a7 100644 --- a/printing/metafile_skia.cc +++ b/printing/metafile_skia.cc
@@ -178,7 +178,7 @@ cc::PlaybackParams::CustomDataRasterCallback custom_callback; switch (data_->type) { case SkiaDocumentType::PDF: - doc = MakePdfDocument(printing::GetAgent(), &stream); + doc = MakePdfDocument(printing::GetAgent(), accessibility_tree_, &stream); break; case SkiaDocumentType::MSKP: SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info);
diff --git a/printing/metafile_skia.h b/printing/metafile_skia.h index 26b9049..f2fb34f 100644 --- a/printing/metafile_skia.h +++ b/printing/metafile_skia.h
@@ -16,6 +16,7 @@ #include "printing/common/metafile_utils.h" #include "printing/metafile.h" #include "skia/ext/platform_canvas.h" +#include "ui/accessibility/ax_tree_update.h" #if defined(OS_WIN) #include <windows.h> @@ -95,6 +96,11 @@ int GetDocumentCookie() const; const ContentToProxyIdMap& GetSubframeContentInfo() const; + const ui::AXTreeUpdate& accessibility_tree() const { + return accessibility_tree_; + } + ui::AXTreeUpdate& accessibility_tree() { return accessibility_tree_; } + private: FRIEND_TEST_ALL_PREFIXES(MetafileSkiaTest, TestFrameContent); @@ -111,6 +117,8 @@ std::unique_ptr<MetafileSkiaData> data_; + ui::AXTreeUpdate accessibility_tree_; + DISALLOW_COPY_AND_ASSIGN(MetafileSkia); };
diff --git a/remoting/host/mac/permission_wizard.mm b/remoting/host/mac/permission_wizard.mm index c6be685..60a043e 100644 --- a/remoting/host/mac/permission_wizard.mm +++ b/remoting/host/mac/permission_wizard.mm
@@ -228,9 +228,12 @@ _instructionText.editable = NO; _instructionText.preferredMaxLayoutWidth = 400; + NSString* appPath = [[NSBundle mainBundle] bundlePath]; + NSImage* iconImage = [[NSWorkspace sharedWorkspace] iconForFile:appPath]; + [iconImage setSize:NSMakeSize(64, 64)]; NSImageView* icon = [[[NSImageView alloc] init] autorelease]; icon.translatesAutoresizingMaskIntoConstraints = NO; - icon.image = [[NSApplication sharedApplication] applicationIconImage]; + icon.image = iconImage; _cancelButton = [[[NSButton alloc] init] autorelease]; _cancelButton.translatesAutoresizingMaskIntoConstraints = NO; @@ -285,7 +288,7 @@ iconAndTextStack.alignment = NSLayoutAttributeTop; [iconAndTextStack addView:icon inGravity:NSStackViewGravityLeading]; [iconAndTextStack addView:_instructionText - inGravity:NSStackViewGravityLeading]; + inGravity:NSStackViewGravityCenter]; NSStackView* buttonsStack = [[[NSStackView alloc] init] autorelease]; buttonsStack.translatesAutoresizingMaskIntoConstraints = NO; @@ -297,10 +300,17 @@ [buttonsStack addView:_nextButton inGravity:NSStackViewGravityTrailing]; [buttonsStack addView:_okButton inGravity:NSStackViewGravityTrailing]; + // Prevent buttonsStack from expanding vertically. This fixes incorrect + // vertical placement of OK button in All Set page + // (http://crbug.com/1032157). The parent NSStackView was expanding this + // view instead of adding space between the gravity-areas. + [buttonsStack setHuggingPriority:NSLayoutPriorityDefaultHigh + forOrientation:NSLayoutConstraintOrientationVertical]; + NSStackView* mainStack = [[[NSStackView alloc] init] autorelease]; mainStack.translatesAutoresizingMaskIntoConstraints = NO; mainStack.orientation = NSUserInterfaceLayoutOrientationVertical; - mainStack.spacing = 20; + mainStack.spacing = 12; [mainStack addView:iconAndTextStack inGravity:NSStackViewGravityTop]; [mainStack addView:buttonsStack inGravity:NSStackViewGravityBottom];
diff --git a/sandbox/linux/services/libc_interceptor.cc b/sandbox/linux/services/libc_interceptor.cc index edc7f91..2f0df72 100644 --- a/sandbox/linux/services/libc_interceptor.cc +++ b/sandbox/linux/services/libc_interceptor.cc
@@ -37,7 +37,6 @@ // they fork. (This means that it'll be incorrect for global constructor // functions and before ZygoteMain is called - beware). bool g_am_zygote_or_renderer = false; -bool g_use_localtime_override = true; int g_backchannel_fd = -1; base::LazyInstance<std::set<std::string>>::Leaky g_timezones = @@ -222,7 +221,7 @@ NO_SANITIZE("cfi-icall") __attribute__((__visibility__("default"))) struct tm* localtime_override( const time_t* timep) { - if (g_am_zygote_or_renderer && g_use_localtime_override) { + if (g_am_zygote_or_renderer) { static struct tm time_struct; static char timezone_string[64]; ProxyLocaltimeCallToBrowser(*timep, &time_struct, timezone_string, @@ -248,7 +247,7 @@ NO_SANITIZE("cfi-icall") __attribute__((__visibility__("default"))) struct tm* localtime64_override( const time_t* timep) { - if (g_am_zygote_or_renderer && g_use_localtime_override) { + if (g_am_zygote_or_renderer) { static struct tm time_struct; static char timezone_string[64]; ProxyLocaltimeCallToBrowser(*timep, &time_struct, timezone_string, @@ -275,7 +274,7 @@ __attribute__((__visibility__("default"))) struct tm* localtime_r_override( const time_t* timep, struct tm* result) { - if (g_am_zygote_or_renderer && g_use_localtime_override) { + if (g_am_zygote_or_renderer) { ProxyLocaltimeCallToBrowser(*timep, result, nullptr, 0); return result; } @@ -299,7 +298,7 @@ __attribute__((__visibility__("default"))) struct tm* localtime64_r_override( const time_t* timep, struct tm* result) { - if (g_am_zygote_or_renderer && g_use_localtime_override) { + if (g_am_zygote_or_renderer) { ProxyLocaltimeCallToBrowser(*timep, result, nullptr, 0); return result; } @@ -315,10 +314,6 @@ return res; } -void SetUseLocaltimeOverride(bool enable) { - g_use_localtime_override = enable; -} - void SetAmZygoteOrRenderer(bool enable, int backchannel_fd) { g_am_zygote_or_renderer = enable; g_backchannel_fd = backchannel_fd;
diff --git a/sandbox/linux/services/libc_interceptor.h b/sandbox/linux/services/libc_interceptor.h index 50bc3ce..a43460e 100644 --- a/sandbox/linux/services/libc_interceptor.h +++ b/sandbox/linux/services/libc_interceptor.h
@@ -34,9 +34,8 @@ // to the parent over the IPC back-channel (see // https://chromium.googlesource.com/chromium/src/+/master/docs/linux/sandbox_ipc.md) // or use dlsym with RTLD_NEXT to resolve the symbol, ignoring any symbols in -// the current module. Use SetUseLocaltimeOverride() and SetAmZygoteOrRenderer() -// below to control the mode of operation, which defaults using the dlsym -// approach. +// the current module. Use SetAmZygoteOrRenderer() below to control the mode of +// operation, which defaults using the dlsym approach. // // Other avenues: // @@ -61,11 +60,6 @@ base::PickleIterator iter, const std::vector<base::ScopedFD>& fds); -// On Linux, localtime is overridden to use a synchronous IPC to the browser -// process to determine the locale. This can be disabled, which causes -// localtime to use UTC instead. https://crbug.com/772503. -SANDBOX_EXPORT void SetUseLocaltimeOverride(bool enable); - // Turns on/off the libc interception. Called by the zygote and inherited by it // children. |backchannel_fd| must be the fd to use for proxying calls. SANDBOX_EXPORT void SetAmZygoteOrRenderer(bool enable, int backchannel_fd);
diff --git a/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc b/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc index 4c70809e..c599471 100644 --- a/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc +++ b/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc
@@ -163,7 +163,6 @@ case SandboxType::kPpapi: return std::make_unique<PpapiProcessPolicy>(); case SandboxType::kUtility: - case SandboxType::kProfiling: return std::make_unique<UtilityProcessPolicy>(); case SandboxType::kCdm: return std::make_unique<CdmProcessPolicy>(); @@ -220,7 +219,6 @@ case SandboxType::kIme: #endif // defined(OS_CHROMEOS) case SandboxType::kAudio: - case SandboxType::kProfiling: case SandboxType::kNetwork: case SandboxType::kUtility: case SandboxType::kNoSandbox:
diff --git a/services/service_manager/sandbox/mac/sandbox_mac.mm b/services/service_manager/sandbox/mac/sandbox_mac.mm index 1a88e28..13f4917 100644 --- a/services/service_manager/sandbox/mac/sandbox_mac.mm +++ b/services/service_manager/sandbox/mac/sandbox_mac.mm
@@ -254,7 +254,6 @@ case service_manager::SandboxType::kPpapi: profile += service_manager::kSeatbeltPolicyString_ppapi; break; - case service_manager::SandboxType::kProfiling: case service_manager::SandboxType::kUtility: profile += service_manager::kSeatbeltPolicyString_utility; break;
diff --git a/services/service_manager/sandbox/sandbox_type.cc b/services/service_manager/sandbox/sandbox_type.cc index 34a35b59..4a577a81 100644 --- a/services/service_manager/sandbox/sandbox_type.cc +++ b/services/service_manager/sandbox/sandbox_type.cc
@@ -36,7 +36,6 @@ case SandboxType::kPpapi: case SandboxType::kCdm: case SandboxType::kPdfCompositor: - case SandboxType::kProfiling: #if defined(OS_FUCHSIA) case SandboxType::kWebContext: #endif @@ -83,7 +82,6 @@ case SandboxType::kNetwork: case SandboxType::kCdm: case SandboxType::kPdfCompositor: - case SandboxType::kProfiling: case SandboxType::kAudio: #if defined(OS_WIN) case SandboxType::kXrCompositing: @@ -162,8 +160,6 @@ return switches::kCdmSandbox; case SandboxType::kPdfCompositor: return switches::kPdfCompositorSandbox; - case SandboxType::kProfiling: - return switches::kProfilingSandbox; case SandboxType::kUtility: return switches::kUtilitySandbox; case SandboxType::kAudio: @@ -212,8 +208,6 @@ return SandboxType::kCdm; if (sandbox_string == switches::kPdfCompositorSandbox) return SandboxType::kPdfCompositor; - if (sandbox_string == switches::kProfilingSandbox) - return SandboxType::kProfiling; #if defined(OS_WIN) if (sandbox_string == switches::kXrCompositingSandbox) return SandboxType::kXrCompositing;
diff --git a/services/service_manager/sandbox/sandbox_type.h b/services/service_manager/sandbox/sandbox_type.h index 40dacf66..f9d8486 100644 --- a/services/service_manager/sandbox/sandbox_type.h +++ b/services/service_manager/sandbox/sandbox_type.h
@@ -61,9 +61,6 @@ // The pdf compositor service process. kPdfCompositor, - // The profiling service process. - kProfiling, - // The audio service process. kAudio,
diff --git a/services/service_manager/sandbox/switches.cc b/services/service_manager/sandbox/switches.cc index 1ba3b59..0b43b8a 100644 --- a/services/service_manager/sandbox/switches.cc +++ b/services/service_manager/sandbox/switches.cc
@@ -27,7 +27,6 @@ const char kUtilitySandbox[] = "utility"; const char kCdmSandbox[] = "cdm"; const char kPdfCompositorSandbox[] = "pdf_compositor"; -const char kProfilingSandbox[] = "profiling"; const char kAudioSandbox[] = "audio"; #if defined(OS_WIN)
diff --git a/services/service_manager/sandbox/switches.h b/services/service_manager/sandbox/switches.h index 00555ced..3e08da1 100644 --- a/services/service_manager/sandbox/switches.h +++ b/services/service_manager/sandbox/switches.h
@@ -26,7 +26,6 @@ SERVICE_MANAGER_SANDBOX_EXPORT extern const char kUtilitySandbox[]; SERVICE_MANAGER_SANDBOX_EXPORT extern const char kCdmSandbox[]; SERVICE_MANAGER_SANDBOX_EXPORT extern const char kPdfCompositorSandbox[]; -SERVICE_MANAGER_SANDBOX_EXPORT extern const char kProfilingSandbox[]; SERVICE_MANAGER_SANDBOX_EXPORT extern const char kAudioSandbox[]; #if defined(OS_WIN)
diff --git a/testing/platform_test.h b/testing/platform_test.h index f993864d..15782b0 100644 --- a/testing/platform_test.h +++ b/testing/platform_test.h
@@ -17,7 +17,7 @@ // the #ifdefs and add a platform_test_<platform>.cc implementation file. class PlatformTest : public testing::Test { public: - virtual ~PlatformTest(); + ~PlatformTest() override; protected: PlatformTest();
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py index d22d56f..049a243 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
@@ -108,10 +108,7 @@ assert False, "Blink does not support/accept IDL void type." if real_type.type_definition_object is not None: - type_def_obj = real_type.type_definition_object - blink_impl_type = ( - type_def_obj.code_generator_info.receiver_implemented_as - or name_style.class_(type_def_obj.identifier)) + blink_impl_type = blink_class_name(real_type.type_definition_object) return TypeInfo( blink_impl_type, member_fmt="Member<{}>", @@ -137,7 +134,12 @@ return TypeInfo("ScriptPromise", ref_fmt="{}&") if real_type.is_union: - return TypeInfo("ToBeImplementedUnion") + def_obj = real_type.union_definition_object + blink_impl_type = blink_class_name(def_obj) + return TypeInfo( + blink_impl_type, + ref_fmt="{}&", + is_nullable=def_obj.does_include_nullable_type) if real_type.is_nullable: inner_type = blink_type_info(real_type.inner_type)
diff --git a/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py b/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py index a32880d..d5ba21f2 100644 --- a/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py +++ b/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py
@@ -595,6 +595,5 @@ self._db.register( DatabaseBody.Kind.UNION, Union( - Identifier(key), # dummy identifier union_types=union_types, typedef_backrefs=grouped_typedefs.get(key, [])))
diff --git a/third_party/blink/renderer/bindings/scripts/web_idl/idl_type.py b/third_party/blink/renderer/bindings/scripts/web_idl/idl_type.py index 0b5fdfe..bc9c736 100644 --- a/third_party/blink/renderer/bindings/scripts/web_idl/idl_type.py +++ b/third_party/blink/renderer/bindings/scripts/web_idl/idl_type.py
@@ -517,6 +517,15 @@ """ return None + @property + def union_definition_object(self): + """ + Returns an object that represents an union or None. + + Note that a returned object is not an IdlType. It's of type Union. + """ + return None + def _format_syntactic_form(self, syntactic_form_inner): """Helper function to implement |syntactic_form|.""" optional_form = 'optional ' if self.is_optional else '' @@ -1078,6 +1087,7 @@ debug_info=debug_info, pass_key=pass_key) self._member_types = tuple(member_types) + self._union_definition_object = None def __eq__(self, other): """ @@ -1148,6 +1158,17 @@ return set(flatten(self)) + @property + def union_definition_object(self): + return self._union_definition_object + + def set_union_definition_object(self, union_definition_object): + # In Python2, we need to avoid circular imports. + from .union import Union + assert isinstance(union_definition_object, Union) + assert self._union_definition_object is None + self._union_definition_object = union_definition_object + class NullableType(IdlType): """https://heycam.github.io/webidl/#idl-nullable-type"""
diff --git a/third_party/blink/renderer/bindings/scripts/web_idl/union.py b/third_party/blink/renderer/bindings/scripts/web_idl/union.py index 02f00b1..ab587da 100644 --- a/third_party/blink/renderer/bindings/scripts/web_idl/union.py +++ b/third_party/blink/renderer/bindings/scripts/web_idl/union.py
@@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from .composition_parts import Identifier +from .composition_parts import WithCodeGeneratorInfo from .composition_parts import WithComponent from .composition_parts import WithDebugInfo from .composition_parts import WithIdentifier @@ -9,7 +11,8 @@ from .typedef import Typedef -class Union(WithIdentifier, WithComponent, WithDebugInfo): +class Union(WithIdentifier, WithCodeGeneratorInfo, WithComponent, + WithDebugInfo): """ Union class makes a group of union types with the same flattened member types and the same result whether it includes a nullable type or not. @@ -28,7 +31,7 @@ expected to define an implementation class for each Union instance. """ - def __init__(self, identifier, union_types, typedef_backrefs): + def __init__(self, union_types, typedef_backrefs): """ Args: union_types: Union types of which this object consists. All types @@ -56,6 +59,7 @@ assert union_type.flattened_member_types == flattened_members assert (union_type.does_include_nullable_type == does_include_nullable_type) + union_type.set_union_definition_object(self) for direct_member in union_type.member_types: if direct_member.is_nullable: nullable_members.add(direct_member) @@ -76,8 +80,15 @@ for idl_type in flattened_members: idl_type.apply_to_all_composing_elements(collect_components) + type_names = sorted( + [idl_type.type_name for idl_type in flattened_members]) + if does_include_nullable_type: + type_names.append('Null') + identifier = Identifier('Or'.join(type_names)) + WithIdentifier.__init__(self, identifier) - WithComponent.__init__(self, sorted(components)) + WithCodeGeneratorInfo.__init__(self, readonly=True) + WithComponent.__init__(self, sorted(components), readonly=True) WithDebugInfo.__init__(self) # Sort improves reproducibility.
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index 52e970a..6664bb4 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -157,7 +157,6 @@ AnimationTimeline* timeline, AnimationEffect* content) : ContextLifecycleObserver(execution_context), - internal_play_state_(kIdle), reported_play_state_(kIdle), playback_rate_(1), start_time_(), @@ -165,7 +164,6 @@ sequence_number_(NextSequenceNumber()), content_(content), timeline_(timeline), - paused_(false), is_paused_for_testing_(false), is_composited_animation_disabled_for_testing_(false), pending_pause_(false), @@ -177,8 +175,6 @@ compositor_state_(nullptr), compositor_pending_(false), compositor_group_(0), - current_time_pending_(false), - state_is_being_updated_(false), effect_suppressed_(false) { if (content_) { if (content_->GetAnimation()) { @@ -259,17 +255,10 @@ ResolvePromiseMaybeAsync(ready_promise_.Get()); } - // TODO(crbug.com/960944): Deprecate use of legacy flags. - if (PlayStateInternal() == kIdle) - paused_ = true; - current_time_pending_ = false; - internal_play_state_ = kUnset; - // Update the finished state. UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kAsync); SetCompositorPending(/*effect_changed=*/false); - internal_play_state_ = CalculateExtendedPlayState(); // Notify of potential state change. NotifyProbe(); @@ -303,71 +292,6 @@ SetOutdated(); } -// TODO(crbug.com/960944): Deprecate. This method is only called by methods that -// are pending refactoring to align with the web-animation spec. -void Animation::SetCurrentTimeInternal(double new_current_time, - TimingUpdateReason reason) { - DCHECK(std::isfinite(new_current_time)); - - bool outdated = false; - bool is_limited = Limited(new_current_time); - bool is_held = paused_ || !playback_rate_ || is_limited || !start_time_; - if (is_held) { - // We only need to update the animation if the seek changes the hold time. - if (!hold_time_ || hold_time_ != new_current_time) - outdated = true; - hold_time_ = new_current_time; - if (paused_ || !playback_rate_) { - start_time_ = base::nullopt; - } else if (is_limited && !start_time_ && - reason == kTimingUpdateForAnimationFrame) { - start_time_ = CalculateStartTime(new_current_time); - } - } else { - hold_time_ = base::nullopt; - start_time_ = CalculateStartTime(new_current_time); - finished_ = false; - outdated = true; - } - - previous_current_time_ = base::nullopt; - - if (outdated) { - SetOutdated(); - } -} - -// Update timing to reflect updated animation clock due to tick -void Animation::UpdateCurrentTimingState(TimingUpdateReason reason) { - bool idle = internal_play_state_ == kIdle; - bool has_active_timeline = timeline_ && timeline_->IsActive(); - if (idle || !has_active_timeline || !playback_rate_) - return; - - if (hold_time_) { - base::Optional<double> new_current_time = hold_time_; - if (internal_play_state_ == kFinished && start_time_ && timeline_) { - // Add hystersis due to floating point error accumulation - base::Optional<double> current_time = CalculateCurrentTime(); - DCHECK(current_time); - if (!Limited(current_time.value() + 0.001 * playback_rate_)) { - // The current time became unlimited, eg. due to a backwards - // seek of the timeline. - new_current_time = current_time; - } else if (!Limited(hold_time_)) { - // The hold time became unlimited, eg. due to the effect - // becoming longer. - new_current_time = - clampTo<double>(current_time.value(), 0, EffectEnd()); - } - } - DCHECK(new_current_time); - SetCurrentTimeInternal(new_current_time.value(), reason); - } else if (Limited(CalculateCurrentTime())) { - hold_time_ = playback_rate_ < 0 ? 0 : EffectEnd(); - } -} - double Animation::startTime(bool& is_null) const { base::Optional<double> result = startTime(); is_null = !result; @@ -504,15 +428,6 @@ compositor_state_->start_time = start_time_; } - // Avoid marking this animation as outdated needlessly when a start time is - // notified. TODO(crbug.com/960944): Remove the need for clearing the - // outdated flag once PlayStateUpdateScope and UpdateCurrentTimingState have - // been removed. - ClearOutdated(); - - // TODO(crbug.com/960944): deprecate use of these flags. - internal_play_state_ = CalculateExtendedPlayState(); - // Notify of change to play state. NotifyProbe(); } @@ -525,7 +440,6 @@ DCHECK(start_time_ || hold_time_); DCHECK(pending_play_); pending_play_ = false; - current_time_pending_ = false; // Update hold and start time. if (hold_time_) { @@ -584,9 +498,6 @@ // Refer to step 7 'pending pause task' in // https://drafts.csswg.org/web-animations-1/#pausing-an-animation-section void Animation::CommitPendingPause(double ready_time) { - // TODO(crbug.com/960944): Deprecate. - internal_play_state_ = kUnset; - DCHECK(pending_pause_); pending_pause_ = false; @@ -709,11 +620,6 @@ hold_time_ = previous_current_time; } - // TODO(crbug.com/960944): prune use of legacy flags. - paused_ = hold_time_.has_value(); - current_time_pending_ = false; - internal_play_state_ = kUnset; - // 7. If animation has a pending play task or a pending pause task, cancel // that task and resolve animation’s current ready promise with animation. if (pending()) { @@ -729,9 +635,6 @@ // synchronously notify flag set to false (async). UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kAsync); - // TODO(crbug.com/960944): prune use of legacy flags. - internal_play_state_ = CalculateExtendedPlayState(); - // Update user agent. base::Optional<double> new_current_time = CurrentTimeInternal(); if (previous_current_time != new_current_time) { @@ -784,9 +687,6 @@ SetCompositorPending(/*effect_change=*/true); - // TODO(crbug.com/960944): Deprecate use of these flags. - internal_play_state_ = CalculateExtendedPlayState(); - // Notify of a potential state change. NotifyProbe(); } @@ -809,25 +709,6 @@ } } -// TODO(crbug.com/960944): Deprecate. -Animation::AnimationPlayState Animation::PlayStateInternal() const { - DCHECK_NE(internal_play_state_, kUnset); - return internal_play_state_; -} - -// TODO(crbug.com/960944): Deprecate. -Animation::AnimationPlayState Animation::CalculateExtendedPlayState() const { - if (paused_ && !current_time_pending_) - return kPaused; - if (internal_play_state_ == kIdle) - return kIdle; - if (current_time_pending_ || (!start_time_ && playback_rate_ != 0)) - return kPending; - if (Limited()) - return kFinished; - return kRunning; -} - // https://drafts.csswg.org/web-animations/#play-states Animation::AnimationPlayState Animation::CalculateAnimationPlayState() const { // 1. All of the following conditions are true: @@ -865,11 +746,26 @@ // https://drafts.csswg.org/web-animations-1/#reset-an-animations-pending-tasks. void Animation::ResetPendingTasks() { - ApplyPendingPlaybackRate(); - pending_pause_ = false; + // 1. If animation does not have a pending play task or a pending pause task, + // abort this procedure. + if (!pending()) + return; + + // 2. If animation has a pending play task, cancel that task. + // 3. If animation has a pending pause task, cancel that task. pending_play_ = false; - // TODO(crbug.com/960944): Fix handling of ready promise to align with the - // web-animtions spec. + pending_pause_ = false; + + // 4. Apply any pending playback rate on animation. + ApplyPendingPlaybackRate(); + + // 5. Reject animation’s current ready promise with a DOMException named + // "AbortError". + // 6. Let animation’s current ready promise be the result of creating a new + // resolved Promise object with value animation in the relevant Realm of + // animation. + if (ready_promise_) + RejectAndResetPromiseMaybeAsync(ready_promise_.Get()); } // ---------------------------------------------- @@ -930,10 +826,6 @@ pending_pause_ = true; pending_play_ = false; - // TODO(crbug.com/958433): Deprecate. - paused_ = true; - internal_play_state_ = kUnset; - SetOutdated(); SetCompositorPending(false); @@ -942,9 +834,6 @@ // notify flag set to false. UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync); - // TODO(crbug.com/958433): Deprecate. - internal_play_state_ = CalculateExtendedPlayState(); - NotifyProbe(); } @@ -1061,9 +950,6 @@ // 8. Schedule a task to run as soon as animation is ready. pending_play_ = true; finished_ = false; - // TODO(crbug.com/960944): Deprecate paused_ and internal_play_state_ flags. - paused_ = false; - internal_play_state_ = kUnset; SetOutdated(); SetCompositorPending(/*effect_changed=*/false); @@ -1073,9 +959,6 @@ // Boolean valued arguments replaced with enumerated values for clarity. UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync); - // TODO(crbug.com/960944): Deprecate. - internal_play_state_ = CalculateExtendedPlayState(); - // Notify change to pending play or finished state. NotifyProbe(); } @@ -1111,19 +994,14 @@ if (pending_playback_rate_.value() == -0) pending_playback_rate_ = 0; - // TODO(crbug.com/960944): Deprecate use of this flag. - current_time_pending_ = true; - // 4. Run the steps to play an animation for animation with the auto-rewind // flag set to true. // If the steps to play an animation throw an exception, set animation’s // pending playback rate to original pending playback rate and propagate // the exception. PlayInternal(AutoRewind::kEnabled, exception_state); - if (exception_state.HadException()) { + if (exception_state.HadException()) pending_playback_rate_ = original_pending_playback_rate; - current_time_pending_ = false; - } } // ---------------------------------------------- @@ -1166,15 +1044,8 @@ ResolvePromiseMaybeAsync(ready_promise_.Get()); } - // TODO(crbug.com/960944): Cleanup use of legacy flags. - paused_ = false; - current_time_pending_ = false; - internal_play_state_ = kUnset; - ResetPendingTasks(); - SetOutdated(); UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kSync); - internal_play_state_ = CalculateExtendedPlayState(); // Notify of change to finished state. NotifyProbe(); @@ -1285,9 +1156,6 @@ // 3. Create an AnimationPlaybackEvent, finishEvent. QueueFinishedEvent(); - - // TODO(crbug.com/960944) Deprecate following flags. - internal_play_state_ = kFinished; } // https://drafts.csswg.org/web-animations/#setting-the-playback-rate-of-an-animation @@ -1365,8 +1233,6 @@ // Run the procedure to play an animation for animation with the // auto-rewind flag set to false. case kRunning: - // TODO(crbug.com/960944): Deprecate use of current_time_pending_ flag. - current_time_pending_ = true; PlayInternal(AutoRewind::kDisabled, exception_state); break; @@ -1419,8 +1285,6 @@ } void Animation::ContextDestroyed(ExecutionContext*) { - PlayStateUpdateScope update_scope(*this, kTimingUpdateOnDemand); - finished_ = true; pending_finished_event_ = nullptr; } @@ -1534,6 +1398,9 @@ if (EffectivePlaybackRate() == 0) reasons |= CompositorAnimations::kInvalidAnimationOrEffect; + if (!CurrentTimeInternal()) + reasons |= CompositorAnimations::kInvalidAnimationOrEffect; + // Cannot composite an infinite duration animation with a negative playback // rate. TODO(crbug.com/1029167): Fix calculation of compositor timing to // enable compositing provided the iteration duration is finite. Having an @@ -1596,18 +1463,16 @@ } } else { base::Optional<double> current_time = CurrentTimeInternal(); - if (current_time) { - time_offset = - reversed ? EffectEnd() - current_time.value() : current_time.value(); - time_offset = time_offset / fabs(EffectivePlaybackRate()); - } else { - time_offset = NullValue(); - } + DCHECK(current_time); + time_offset = + reversed ? EffectEnd() - current_time.value() : current_time.value(); + time_offset = time_offset / fabs(EffectivePlaybackRate()); } DCHECK(!start_time || !IsNull(start_time.value())); DCHECK_NE(compositor_group_, 0); DCHECK(To<KeyframeEffect>(content_.Get())); + DCHECK(std::isfinite(time_offset)); To<KeyframeEffect>(content_.Get()) ->StartAnimationOnCompositor(compositor_group_, start_time, time_offset, EffectivePlaybackRate()); @@ -1791,18 +1656,8 @@ } void Animation::cancel() { - // TODO(crbug.com/916117): Get rid of internal_play_state_. - internal_play_state_ = kUnset; AnimationPlayState initial_play_state = CalculateAnimationPlayState(); if (initial_play_state != kIdle) { - if (pending()) { - // TODO(crbug.com/916117): Rejecting the ready promise should be performed - // inside reset pending tasks once aligned with the spec. - // TODO(crbug.com/1013351): Add test for rejection and reset of cancel - // promise. Requires further cleanup of PlayStateUpdateScope. - if (ready_promise_) - RejectAndResetPromiseMaybeAsync(ready_promise_.Get()); - } ResetPendingTasks(); if (finished_promise_) { @@ -1832,12 +1687,6 @@ hold_time_ = base::nullopt; start_time_ = base::nullopt; - // TODO(crbug.com/958433): Phase out the use of these variables, which are not - // in the spec. - paused_ = false; - internal_play_state_ = kIdle; - current_time_pending_ = false; - // Apply changes synchronously. SetCompositorPending(/*effect_changed=*/false); SetOutdated(); @@ -1849,17 +1698,6 @@ NotifyProbe(); } -void Animation::BeginUpdatingState() { - // Nested calls are not allowed! - DCHECK(!state_is_being_updated_); - state_is_being_updated_ = true; -} - -void Animation::EndUpdatingState() { - DCHECK(state_is_being_updated_); - state_is_being_updated_ = false; -} - void Animation::CreateCompositorAnimation() { if (Platform::Current()->IsThreadedAnimationEnabled() && !compositor_animation_) { @@ -1922,80 +1760,6 @@ monotonic_time, group); } -Animation::PlayStateUpdateScope::PlayStateUpdateScope( - Animation& animation, - TimingUpdateReason reason, - CompositorPendingChange compositor_pending_change) - : animation_(animation), - initial_play_state_(animation_->PlayStateInternal()), - compositor_pending_change_(compositor_pending_change) { - DCHECK_NE(initial_play_state_, kUnset); - animation_->BeginUpdatingState(); - animation_->UpdateCurrentTimingState(reason); -} - -Animation::PlayStateUpdateScope::~PlayStateUpdateScope() { - AnimationPlayState old_play_state = initial_play_state_; - AnimationPlayState new_play_state = animation_->CalculateExtendedPlayState(); - animation_->internal_play_state_ = new_play_state; - - // Ordering is important, the ready promise should resolve/reject before - // the finished promise. - if (animation_->ready_promise_ && new_play_state != old_play_state) { - // Transitioning to an idle state is handled in cancel(). - DCHECK(new_play_state != kIdle); - - if (old_play_state == kPending) { - animation_->ResetPendingTasks(); - if (animation_->ready_promise_->GetState() == AnimationPromise::kPending) - animation_->ResolvePromiseMaybeAsync(animation_->ready_promise_.Get()); - } else if (new_play_state == kPending) { - if (animation_->ready_promise_->GetState() != AnimationPromise::kPending) - animation_->ready_promise_->Reset(); - } - } - - if (animation_->finished_promise_ && new_play_state != old_play_state) { - // Transitioning to an idle state is handled in cancel(). - DCHECK(new_play_state != kIdle); - - if (new_play_state == kFinished) { - animation_->ResetPendingTasks(); - animation_->ResolvePromiseMaybeAsync(animation_->finished_promise_.Get()); - } else if (old_play_state == kFinished) { - animation_->finished_promise_->Reset(); - } - } - - if (old_play_state != new_play_state && - (old_play_state == kIdle || new_play_state == kIdle)) { - animation_->SetOutdated(); - } - -#if DCHECK_IS_ON() - // Verify that current time is up to date. - animation_->CurrentTimeInternal(); -#endif - - switch (compositor_pending_change_) { - case kSetCompositorPending: - animation_->SetCompositorPending(); - break; - case kSetCompositorPendingWithEffectChanged: - animation_->SetCompositorPending(true); - break; - case kDoNotSetCompositorPending: - break; - default: - NOTREACHED(); - break; - } - animation_->EndUpdatingState(); - - // Play state may have changed. - animation_->NotifyProbe(); -} - void Animation::AddedEventListener( const AtomicString& event_type, RegisteredEventListener& registered_listener) {
diff --git a/third_party/blink/renderer/core/animation/animation.h b/third_party/blink/renderer/core/animation/animation.h index e6609f5..e43616ab 100644 --- a/third_party/blink/renderer/core/animation/animation.h +++ b/third_party/blink/renderer/core/animation/animation.h
@@ -247,14 +247,8 @@ RegisteredEventListener&) override; private: - // TODO(crbug.com/960944): Deprecate. This version of the play state is not to - // spec due to the inclusion of a 'pending' state. Whether or not an animation - // is pending is separate from the actual play state. - AnimationPlayState PlayStateInternal() const; - base::Optional<double> CurrentTimeInternal() const; void SetCurrentTimeInternal(double new_current_time); - void SetCurrentTimeInternal(double new_current_time, TimingUpdateReason); void ClearOutdated(); void ForceServiceOnNextFrame(); @@ -268,21 +262,9 @@ double EffectivePlaybackRate() const; void ApplyPendingPlaybackRate(); - // https://drafts.csswg.org/web-animations/#play-states - // Per spec the viable states are: idle, running, paused and finished. - // Our implementation has an additional state called 'pending' which serves a - // similar purpose to micro-tasks in the spec. This additional state is for - // internal flow control only and should not be reported via - // animation.playState. - // TODO(crbug.com/958433): Deprecate this method in favor of the - // spec-compliant GetPlayState(). - AnimationPlayState CalculateExtendedPlayState() const; - base::Optional<double> CalculateStartTime(double current_time) const; base::Optional<double> CalculateCurrentTime() const; - void UpdateCurrentTimingState(TimingUpdateReason); - void BeginUpdatingState(); void EndUpdatingState(); @@ -335,11 +317,6 @@ String id_; - // Extended play state with additional pending state for managing timing of - // micro-tasks. - // TODO(crbug.com/958433): Phase out this version of the play state. Should - // just need the reported play state. - AnimationPlayState internal_play_state_; // Extended play state reported to dev tools. This play state has an // additional pending state that is not part of the spec by expected by dev // tools. @@ -364,8 +341,7 @@ Member<Document> document_; Member<AnimationTimeline> timeline_; - // Reflects all pausing, including via pauseForTesting(). - bool paused_; + // Testing flags. bool is_paused_for_testing_; bool is_composited_animation_disabled_for_testing_; @@ -417,21 +393,6 @@ kDoNotSetCompositorPending, }; - class PlayStateUpdateScope { - STACK_ALLOCATED(); - - public: - PlayStateUpdateScope(Animation&, - TimingUpdateReason, - CompositorPendingChange = kSetCompositorPending); - ~PlayStateUpdateScope(); - - private: - Member<Animation> animation_; - AnimationPlayState initial_play_state_; - CompositorPendingChange compositor_pending_change_; - }; - // CompositorAnimation objects need to eagerly sever their connection to their // Animation delegate; use a separate 'holder' on-heap object to accomplish // that. @@ -468,9 +429,6 @@ Member<CompositorAnimationHolder> compositor_animation_; - bool current_time_pending_; - bool state_is_being_updated_; - bool effect_suppressed_; FRIEND_TEST_ALL_PREFIXES(AnimationAnimationTestCompositeAfterPaint,
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_manager.cc b/third_party/blink/renderer/core/content_capture/content_capture_manager.cc index c0e166ff..d403eced 100644 --- a/third_party/blink/renderer/core/content_capture/content_capture_manager.cc +++ b/third_party/blink/renderer/core/content_capture/content_capture_manager.cc
@@ -5,7 +5,6 @@ #include "third_party/blink/renderer/core/content_capture/content_capture_manager.h" #include "third_party/blink/renderer/core/content_capture/sent_nodes.h" -#include "third_party/blink/renderer/core/dom/dom_node_ids.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/layout/layout_text.h" @@ -20,14 +19,13 @@ ContentCaptureManager::~ContentCaptureManager() = default; -DOMNodeId ContentCaptureManager::GetNodeId(Node& node) { +void ContentCaptureManager::ScheduleTaskIfNeeded() { if (first_node_holder_created_) { ScheduleTask(ContentCaptureTask::ScheduleReason::kContentChange); } else { ScheduleTask(ContentCaptureTask::ScheduleReason::kFirstContentChange); first_node_holder_created_ = true; } - return DOMNodeIds::IdForNode(&node); } void ContentCaptureManager::ScheduleTask(
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_manager.h b/third_party/blink/renderer/core/content_capture/content_capture_manager.h index 9d374aa..00a2e596 100644 --- a/third_party/blink/renderer/core/content_capture/content_capture_manager.h +++ b/third_party/blink/renderer/core/content_capture/content_capture_manager.h
@@ -24,11 +24,8 @@ explicit ContentCaptureManager(LocalFrame& local_frame_root); virtual ~ContentCaptureManager(); - // Creates and returns NodeHolder for the given |node|, and schedules - // ContentCaptureTask if it isn't already scheduled. - // Can't use const Node& for parameter, because |node| is passed to - // DOMNodeIds::IdForNode(Node*). - DOMNodeId GetNodeId(Node& node); + // Schedules ContentCaptureTask if it isn't already scheduled. + void ScheduleTaskIfNeeded(); // Invokes when the |node_holder| asscociated LayoutText will be destroyed. void OnLayoutTextWillBeDestroyed(const Node& node);
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_test.cc b/third_party/blink/renderer/core/content_capture/content_capture_test.cc index 930c048..614eee7 100644 --- a/third_party/blink/renderer/core/content_capture/content_capture_test.cc +++ b/third_party/blink/renderer/core/content_capture/content_capture_test.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/public/web/web_content_capture_client.h" #include "third_party/blink/public/web/web_content_holder.h" #include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h" +#include "third_party/blink/renderer/core/dom/dom_node_ids.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" @@ -192,7 +193,8 @@ Element* div_element = GetElementById("d1"); div_element->appendChild(element); UpdateAllLifecyclePhasesForTest(); - created_node_id_ = GetContentCaptureManager()->GetNodeId(*node); + GetContentCaptureManager()->ScheduleTaskIfNeeded(); + created_node_id_ = DOMNodeIds::IdForNode(node); Vector<DOMNodeId> captured_content{created_node_id_}; content_capture_manager_->GetContentCaptureTask() ->SetCapturedContentForTesting(captured_content); @@ -268,7 +270,8 @@ CHECK(layout_object); CHECK(layout_object->IsText()); nodes_.push_back(node); - node_ids_.push_back(GetContentCaptureManager()->GetNodeId(*node)); + GetContentCaptureManager()->ScheduleTaskIfNeeded(); + node_ids_.push_back(DOMNodeIds::IdForNode(node)); } }
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.cc b/third_party/blink/renderer/core/css/css_gradient_value.cc index 9df4ac3..e4b4c49 100644 --- a/third_party/blink/renderer/core/css/css_gradient_value.cc +++ b/third_party/blink/renderer/core/css/css_gradient_value.cc
@@ -390,7 +390,8 @@ const float first_offset = stops.front().offset; const float last_offset = stops.back().offset; - const float span = last_offset - first_offset; + const float span = + std::min(last_offset - first_offset, std::numeric_limits<float>::max()); if (fabs(span) < std::numeric_limits<float>::epsilon()) { // All stops are coincident -> use a single clamped offset value. @@ -410,7 +411,9 @@ DCHECK_GT(span, 0); for (wtf_size_t i = 0; i < stops.size(); ++i) { - const float normalized_offset = (stops[i].offset - first_offset) / span; + const auto relative_offset = std::min(stops[i].offset - first_offset, + std::numeric_limits<float>::max()), + normalized_offset = relative_offset / span; // stop offsets should be monotonically increasing in [0 , 1] DCHECK_GE(normalized_offset, 0);
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc b/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc index 943773e9..e61bc58 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc +++ b/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/finder/text_finder.h" +#include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h" #include "third_party/blink/renderer/core/editing/visible_units.h" #include "third_party/blink/renderer/core/frame/find_in_page.h" #include "third_party/blink/renderer/core/frame/frame_test_helpers.h" @@ -340,6 +341,84 @@ } TEST_F(DisplayLockContextTest, + ActivatableLockedElementTickmarksAreAtLockedRoots) { + ResizeAndFocus(); + SetHtmlInnerHTML(R"HTML( + <style> + body { + margin: 0; + padding: 0; + } + .small { + width: 100px; + height: 100px; + } + .medium { + width: 150px; + height: 150px; + } + .large { + width: 200px; + height: 200px; + } + </style> + <body> + testing + <div id="container1" class=small>testing</div> + <div id="container2" class=medium>testing</div> + <div id="container3" class=large> + <div id="container4" class=medium>testing</div> + </div> + <div id="container5" class=small>testing</div> + </body> + )HTML"); + + const String search_text = "testing"; + DisplayLockTestFindInPageClient client; + client.SetFrame(LocalMainFrame()); + + auto* container1 = GetDocument().getElementById("container1"); + auto* container2 = GetDocument().getElementById("container2"); + auto* container3 = GetDocument().getElementById("container3"); + auto* container4 = GetDocument().getElementById("container4"); + auto* container5 = GetDocument().getElementById("container5"); + LockElement(*container5, false /* activatable */); + LockElement(*container4, true /* activatable */); + LockElement(*container3, true /* activatable */); + LockElement(*container2, true /* activatable */); + LockElement(*container1, true /* activatable */); + + EXPECT_TRUE(container1->GetDisplayLockContext()->IsLocked()); + EXPECT_TRUE(container2->GetDisplayLockContext()->IsLocked()); + EXPECT_TRUE(container3->GetDisplayLockContext()->IsLocked()); + EXPECT_TRUE(container4->GetDisplayLockContext()->IsLocked()); + EXPECT_TRUE(container5->GetDisplayLockContext()->IsLocked()); + + // Do a find-in-page. + Find(search_text, client); + // "testing" outside of the container divs, and 3 inside activatable divs. + EXPECT_EQ(4, client.Count()); + + auto tick_rects = GetDocument().Markers().LayoutRectsForTextMatchMarkers(); + ASSERT_EQ(4u, tick_rects.size()); + + // Sort the layout rects by y coordinate for deterministic checks below. + std::sort(tick_rects.begin(), tick_rects.end(), + [](const IntRect& a, const IntRect& b) { return a.Y() < b.Y(); }); + + int y_offset = tick_rects[0].Height(); + + // The first tick rect will be based on the text itself, so we don't need to + // check that. The next three should be the small, medium and large rects, + // since those are the locked roots. + EXPECT_EQ(IntRect(0, y_offset, 100, 100), tick_rects[1]); + y_offset += tick_rects[1].Height(); + EXPECT_EQ(IntRect(0, y_offset, 150, 150), tick_rects[2]); + y_offset += tick_rects[2].Height(); + EXPECT_EQ(IntRect(0, y_offset, 200, 200), tick_rects[3]); +} + +TEST_F(DisplayLockContextTest, FindInPageWhileLockedContentChangesDoesNotCrash) { ResizeAndFocus(); SetHtmlInnerHTML(R"HTML(
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 8acb6bc..aa0a07a9 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -3107,6 +3107,7 @@ if (LocalFrameView* frame_view_anchored = View()) frame_view_anchored->PerformScrollAnchoringAdjustments(); + PerformScrollSnappingTasks(); if (status == IsForcedLayout && frame_view) frame_view->DidFinishForcedLayout(); @@ -7565,6 +7566,13 @@ return *snap_coordinator_; } +void Document::PerformScrollSnappingTasks() { + SnapCoordinator& snap_coordinator = GetSnapCoordinator(); + snap_coordinator.UpdateAllSnapContainerDataIfNeeded(); + if (RuntimeEnabledFeatures::ScrollSnapAfterLayoutEnabled()) + snap_coordinator.ResnapAllContainersIfNeeded(); +} + void Document::SetContextFeatures(ContextFeatures& features) { context_features_ = &features; }
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index fa1bae91b..8f0d109 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -1370,6 +1370,7 @@ int NodeCount() const { return node_count_; } SnapCoordinator& GetSnapCoordinator(); + void PerformScrollSnappingTasks(); void DidEnforceInsecureRequestPolicy(); void DidEnforceInsecureNavigationsSet();
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator.cc b/third_party/blink/renderer/core/editing/iterators/text_iterator.cc index 5218159..49379b5 100644 --- a/third_party/blink/renderer/core/editing/iterators/text_iterator.cc +++ b/third_party/blink/renderer/core/editing/iterators/text_iterator.cc
@@ -176,9 +176,11 @@ if (!behavior.EntersTextControls() && IsTextControl(node)) return false; - if (auto* element = DynamicTo<Element>(node)) { - if (auto* context = element->GetDisplayLockContext()) { - return context->IsActivatable(DisplayLockActivationReason::kSelection); + if (!behavior.IgnoresDisplayLock()) { + if (auto* element = DynamicTo<Element>(node)) { + if (auto* context = element->GetDisplayLockContext()) { + return context->IsActivatable(DisplayLockActivationReason::kSelection); + } } } return true; @@ -310,7 +312,14 @@ node_ = nullptr; return; } + + // If an element is locked, we shouldn't recurse down into its children + // since they might not have up-to-date layout. In particular, they might + // not have the NG offset mapping which is required. The display lock can + // still be bypassed by marking the iterator behavior to ignore display + // lock. const bool locked = + !behavior_.IgnoresDisplayLock() && DisplayLockUtilities::NearestLockedInclusiveAncestor(*node_); LayoutObject* layout_object = node_->GetLayoutObject();
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.cc b/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.cc index 222626f..98cabe8 100644 --- a/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.cc +++ b/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.cc
@@ -130,6 +130,12 @@ behavior_.values_.bits.suppresses_newline_emission = value; return *this; } + +TextIteratorBehavior::Builder& +TextIteratorBehavior::Builder::SetIgnoresDisplayLock(bool value) { + behavior_.values_.bits.ignores_display_lock = value; + return *this; +} // - TextIteratorBehavior::TextIteratorBehavior(const TextIteratorBehavior& other) = default;
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.h b/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.h index 0ff7f22..f198a7a 100644 --- a/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.h +++ b/third_party/blink/renderer/core/editing/iterators/text_iterator_behavior.h
@@ -71,6 +71,8 @@ bool SuppressesExtraNewlineEmission() const { return values_.bits.suppresses_newline_emission; } + + bool IgnoresDisplayLock() const { return values_.bits.ignores_display_lock; } static TextIteratorBehavior EmitsObjectReplacementCharacterBehavior(); static TextIteratorBehavior IgnoresStyleVisibilityBehavior(); static TextIteratorBehavior DefaultRangeLengthBehavior(); @@ -100,6 +102,7 @@ bool does_not_emit_space_beyond_range_end : 1; bool skips_unselectable_content : 1; bool suppresses_newline_emission : 1; + bool ignores_display_lock : 1; } bits; } values_; }; @@ -133,6 +136,7 @@ Builder& SetDoesNotEmitSpaceBeyondRangeEnd(bool); Builder& SetSkipsUnselectableContent(bool); Builder& SetSuppressesExtraNewlineEmission(bool); + Builder& SetIgnoresDisplayLock(bool); private: TextIteratorBehavior behavior_;
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator_test.cc b/third_party/blink/renderer/core/editing/iterators/text_iterator_test.cc index 1bfddc2c..d349b2b 100644 --- a/third_party/blink/renderer/core/editing/iterators/text_iterator_test.cc +++ b/third_party/blink/renderer/core/editing/iterators/text_iterator_test.cc
@@ -1034,7 +1034,7 @@ TEST_P(TextIteratorTest, IterateWithLockedSubtree) { SetBodyContent("<div id='parent'>foo<div id='locked'>text</div>bar</div>"); auto* locked = GetDocument().getElementById("locked"); - locked->setAttribute("rendersubtree", "invisible activatable"); + locked->setAttribute("rendersubtree", "invisible"); GetDocument().UpdateStyleAndLayout(); auto* parent = GetDocument().getElementById("parent"); const Position start_position = Position::FirstPositionInNode(*parent);
diff --git a/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc b/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc index 5df64a5..46a5bcb84 100644 --- a/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc +++ b/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc
@@ -173,10 +173,16 @@ const EphemeralRange& range, TextMatchMarker::MatchStatus match_status) { DCHECK(!document_->NeedsLayoutTreeUpdate()); - AddMarkerInternal(range, [match_status](int start_offset, int end_offset) { - return MakeGarbageCollected<TextMatchMarker>(start_offset, end_offset, - match_status); - }); + AddMarkerInternal( + range, + [match_status](int start_offset, int end_offset) { + return MakeGarbageCollected<TextMatchMarker>(start_offset, end_offset, + match_status); + }, + // Since we've already determined to have a match in the given range (via + // FindBuffer), we can ignore the display lock for the purposes of finding + // where to put the marker. + TextIteratorBehavior::Builder().SetIgnoresDisplayLock(true).Build()); // Don't invalidate tickmarks here. TextFinder invalidates tickmarks using a // throttling algorithm. crbug.com/6819. } @@ -258,8 +264,10 @@ void DocumentMarkerController::AddMarkerInternal( const EphemeralRange& range, - std::function<DocumentMarker*(int, int)> create_marker_from_offsets) { - for (TextIterator marked_text(range.StartPosition(), range.EndPosition()); + std::function<DocumentMarker*(int, int)> create_marker_from_offsets, + const TextIteratorBehavior& iterator_behavior) { + for (TextIterator marked_text(range.StartPosition(), range.EndPosition(), + iterator_behavior); !marked_text.AtEnd(); marked_text.Advance()) { const int start_offset_in_current_container = marked_text.StartOffsetInCurrentContainer();
diff --git a/third_party/blink/renderer/core/editing/markers/document_marker_controller.h b/third_party/blink/renderer/core/editing/markers/document_marker_controller.h index 64274cd..bb13c084 100644 --- a/third_party/blink/renderer/core/editing/markers/document_marker_controller.h +++ b/third_party/blink/renderer/core/editing/markers/document_marker_controller.h
@@ -166,7 +166,8 @@ private: void AddMarkerInternal( const EphemeralRange&, - std::function<DocumentMarker*(int, int)> create_marker_from_offsets); + std::function<DocumentMarker*(int, int)> create_marker_from_offsets, + const TextIteratorBehavior& iterator_behavior = {}); void AddMarkerToNode(const Text&, DocumentMarker*); using MarkerLists = HeapVector<Member<DocumentMarkerList>,
diff --git a/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.cc b/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.cc index 767ba9fe..f9c8599d 100644 --- a/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.cc +++ b/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.h" +#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h" #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/dom/range.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" @@ -11,6 +12,7 @@ #include "third_party/blink/renderer/core/editing/visible_units.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" +#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink { @@ -19,14 +21,32 @@ } static void UpdateMarkerLayoutRect(const Node& node, TextMatchMarker& marker) { - const Position start_position(node, marker.StartOffset()); - const Position end_position(node, marker.EndOffset()); - EphemeralRange range(start_position, end_position); - DCHECK(node.GetDocument().GetFrame()); LocalFrameView* frame_view = node.GetDocument().GetFrame()->View(); DCHECK(frame_view); + + // If we have a locked ancestor, then the only reliable place to have a marker + // is at the locked root rect, since the elements under a locked root might + // not have up-to-date layout information. + if (auto* locked_root = + DisplayLockUtilities::HighestLockedInclusiveAncestor(node)) { + if (auto* locked_root_layout_object = locked_root->GetLayoutObject()) { + marker.SetRect(frame_view->FrameToDocument( + PhysicalRect(locked_root_layout_object->AbsoluteBoundingBoxRect()))); + } else { + // If the locked root doesn't have a layout object, then we don't have the + // information needed to place the tickmark. Set the marker rect to an + // empty rect. + marker.SetRect(PhysicalRect()); + } + return; + } + + const Position start_position(node, marker.StartOffset()); + const Position end_position(node, marker.EndOffset()); + EphemeralRange range(start_position, end_position); + marker.SetRect( frame_view->FrameToDocument(PhysicalRect(ComputeTextRect(range)))); }
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index ae8df17..32c645b 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -1837,11 +1837,6 @@ this->GetScrollingCoordinator()) { scrolling_coordinator->NotifyGeometryChanged(this); } - SnapCoordinator& snap_coordinator = - frame_->GetDocument()->GetSnapCoordinator(); - snap_coordinator.UpdateAllSnapContainerData(); - if (RuntimeEnabledFeatures::ScrollSnapAfterLayoutEnabled()) - snap_coordinator.ReSnapAllContainers(); SendResizeEventIfNeeded(); } @@ -2378,6 +2373,8 @@ frame_view.PerformScrollAnchoringAdjustments(); }); + frame_->GetDocument()->PerformScrollSnappingTasks(); + EnqueueScrollEvents(); frame_->GetPage()->GetValidationMessageClient().LayoutOverlay();
diff --git a/third_party/blink/renderer/core/frame/root_frame_viewport.cc b/third_party/blink/renderer/core/frame/root_frame_viewport.cc index 1efda8d..30da154a 100644 --- a/third_party/blink/renderer/core/frame/root_frame_viewport.cc +++ b/third_party/blink/renderer/core/frame/root_frame_viewport.cc
@@ -672,6 +672,22 @@ return LayoutViewport().SetTargetSnapAreaElementIds(snap_target_ids); } +bool RootFrameViewport::SnapContainerDataNeedsUpdate() const { + return LayoutViewport().SnapContainerDataNeedsUpdate(); +} + +void RootFrameViewport::SetSnapContainerDataNeedsUpdate(bool needs_update) { + LayoutViewport().SetSnapContainerDataNeedsUpdate(needs_update); +} + +bool RootFrameViewport::NeedsResnap() const { + return LayoutViewport().NeedsResnap(); +} + +void RootFrameViewport::SetNeedsResnap(bool needs_resnap) { + LayoutViewport().SetNeedsResnap(needs_resnap); +} + base::Optional<FloatPoint> RootFrameViewport::GetSnapPositionAndSetTarget( const cc::SnapSelectionStrategy& strategy) { return LayoutViewport().GetSnapPositionAndSetTarget(strategy);
diff --git a/third_party/blink/renderer/core/frame/root_frame_viewport.h b/third_party/blink/renderer/core/frame/root_frame_viewport.h index f9a4456..824fe35 100644 --- a/third_party/blink/renderer/core/frame/root_frame_viewport.h +++ b/third_party/blink/renderer/core/frame/root_frame_viewport.h
@@ -122,9 +122,16 @@ unsigned = 0) const final; scoped_refptr<base::SingleThreadTaskRunner> GetTimerTaskRunner() const final; ScrollbarTheme& GetPageScrollbarTheme() const override; + + // RootFrameViewport delegates these scroll-snap methods to its layout + // viewport. const cc::SnapContainerData* GetSnapContainerData() const override; void SetSnapContainerData(base::Optional<cc::SnapContainerData>) override; bool SetTargetSnapAreaElementIds(cc::TargetSnapAreaElementIds) override; + bool SnapContainerDataNeedsUpdate() const override; + void SetSnapContainerDataNeedsUpdate(bool) override; + bool NeedsResnap() const override; + void SetNeedsResnap(bool) override; base::Optional<FloatPoint> GetSnapPositionAndSetTarget( const cc::SnapSelectionStrategy& strategy) override;
diff --git a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc index 93da5c3..0f2a685 100644 --- a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc
@@ -55,9 +55,11 @@ return FormControlState(GetElement().checked() ? "on" : "off"); } -void BaseCheckableInputType::RestoreFormControlState( +bool BaseCheckableInputType::RestoreFormControlState( const FormControlState& state) { + bool old_checked = GetElement().checked(); GetElement().setChecked(state[0] == "on"); + return old_checked != GetElement().checked(); } void BaseCheckableInputType::AppendToFormData(FormData& form_data) const {
diff --git a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h index d9696d3..8b5fc1b 100644 --- a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h +++ b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h
@@ -57,7 +57,7 @@ private: InputTypeView* CreateView() override; FormControlState SaveFormControlState() const final; - void RestoreFormControlState(const FormControlState&) final; + bool RestoreFormControlState(const FormControlState&) final; void AppendToFormData(FormData&) const final; void HandleKeypressEvent(KeyboardEvent&) final; bool CanSetStringValue() const final;
diff --git a/third_party/blink/renderer/core/html/forms/file_input_type.cc b/third_party/blink/renderer/core/html/forms/file_input_type.cc index 5e07aa0..83eb6be1 100644 --- a/third_party/blink/renderer/core/html/forms/file_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/file_input_type.cc
@@ -116,9 +116,11 @@ return state; } -void FileInputType::RestoreFormControlState(const FormControlState& state) { +bool FileInputType::RestoreFormControlState(const FormControlState& state) { + // Check if the state is broken. + // See File::AppendToControlState() and File::CreateFromControlState(). if (state.ValueSize() % 3) - return; + return false; HeapVector<Member<File>> file_vector = CreateFilesFrom<File*, HeapVector<Member<File>>>( state, &File::CreateFromControlState); @@ -126,6 +128,9 @@ for (const auto& file : file_vector) file_list->Append(file); SetFilesAndDispatchEvents(file_list); + // This function always returns false because SetFilesAndDispatchEvents() + // dispatches events if files are changed. + return false; } void FileInputType::AppendToFormData(FormData& form_data) const {
diff --git a/third_party/blink/renderer/core/html/forms/file_input_type.h b/third_party/blink/renderer/core/html/forms/file_input_type.h index 256a752..9cb288b 100644 --- a/third_party/blink/renderer/core/html/forms/file_input_type.h +++ b/third_party/blink/renderer/core/html/forms/file_input_type.h
@@ -67,7 +67,7 @@ InputTypeView* CreateView() override; const AtomicString& FormControlType() const override; FormControlState SaveFormControlState() const override; - void RestoreFormControlState(const FormControlState&) override; + bool RestoreFormControlState(const FormControlState&) override; void AppendToFormData(FormData&) const override; bool ValueMissing(const String&) const override; String ValueMissingText() const override;
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.cc b/third_party/blink/renderer/core/html/forms/html_input_element.cc index 052cab5..c3ebbea 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element.cc
@@ -584,9 +584,10 @@ } void HTMLInputElement::RestoreFormControlState(const FormControlState& state) { - input_type_view_->RestoreFormControlState(state); - state_restored_ = true; - QueueInputAndChangeEvents(); + if (input_type_view_->RestoreFormControlState(state)) { + state_restored_ = true; + QueueInputAndChangeEvents(); + } } bool HTMLInputElement::CanStartSelection() const {
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc index 68ec949..a94e7f8 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -1187,6 +1187,13 @@ if (items_size == 0) return; + Vector<bool> old_selection(items_size); + for (wtf_size_t i = 0; i < items_size; ++i) { + if (auto* option = DynamicTo<HTMLOptionElement>(items[i].Get())) + old_selection[i] = option->Selected(); + else + old_selection[i] = false; + } SelectOption(nullptr, kDeselectOtherOptionsFlag); // The saved state should have at least one value and an index. @@ -1237,7 +1244,15 @@ } SetNeedsValidityCheck(); - QueueInputAndChangeEvents(); + + for (wtf_size_t i = 0; i < items_size; ++i) { + if (auto* option = DynamicTo<HTMLOptionElement>(items[i].Get())) { + if (old_selection[i] != option->Selected()) { + QueueInputAndChangeEvents(); + break; + } + } + } } void HTMLSelectElement::ParseMultipleAttribute(const AtomicString& value) {
diff --git a/third_party/blink/renderer/core/html/forms/html_text_area_element.cc b/third_party/blink/renderer/core/html/forms/html_text_area_element.cc index d73223d..d93d48dd 100644 --- a/third_party/blink/renderer/core/html/forms/html_text_area_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_text_area_element.cc
@@ -94,6 +94,8 @@ void HTMLTextAreaElement::RestoreFormControlState( const FormControlState& state) { + if (EqualIgnoringNullity(value(), state[0])) + return; // We don't add kDispatchInputAndChangeEvent to setValue(), and we // post tasks to dispatch events instead. This function can be called // while we should not dispatch any events.
diff --git a/third_party/blink/renderer/core/html/forms/input_type_view.cc b/third_party/blink/renderer/core/html/forms/input_type_view.cc index ed41b3c..5eada37 100644 --- a/third_party/blink/renderer/core/html/forms/input_type_view.cc +++ b/third_party/blink/renderer/core/html/forms/input_type_view.cc
@@ -177,8 +177,10 @@ return FormControlState(current_value); } -void InputTypeView::RestoreFormControlState(const FormControlState& state) { +bool InputTypeView::RestoreFormControlState(const FormControlState& state) { + String old_value = GetElement().value(); GetElement().setValue(state[0]); + return !EqualIgnoringNullity(old_value, GetElement().value()); } bool InputTypeView::HasBadInput() const {
diff --git a/third_party/blink/renderer/core/html/forms/input_type_view.h b/third_party/blink/renderer/core/html/forms/input_type_view.h index ef47dea..5a190e03 100644 --- a/third_party/blink/renderer/core/html/forms/input_type_view.h +++ b/third_party/blink/renderer/core/html/forms/input_type_view.h
@@ -128,7 +128,9 @@ virtual void EnsurePrimaryContent() {} virtual bool HasFallbackContent() const { return false; } virtual FormControlState SaveFormControlState() const; - virtual void RestoreFormControlState(const FormControlState&); + // Should return |true| if the value is changed and the callsite needs to + // dispatch 'input' and 'change' events. + virtual bool RestoreFormControlState(const FormControlState&); // Validation functions virtual bool HasBadInput() const;
diff --git a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc index 4e2cada7..a30cb0a2 100644 --- a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc +++ b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc
@@ -527,16 +527,18 @@ edit->ReadOnlyStateChanged(); } -void MultipleFieldsTemporalInputTypeView::RestoreFormControlState( +bool MultipleFieldsTemporalInputTypeView::RestoreFormControlState( const FormControlState& state) { DateTimeEditElement* edit = GetDateTimeEditElement(); if (!edit) - return; + return false; + String old_value = GetElement().value(); DateTimeFieldsState date_time_fields_state = DateTimeFieldsState::RestoreFormControlState(state); edit->SetValueAsDateTimeFieldsState(date_time_fields_state); GetElement().SetNonAttributeValue(input_type_->SanitizeValue(edit->Value())); UpdateClearButtonVisibility(); + return !EqualIgnoringNullity(old_value, GetElement().value()); } FormControlState MultipleFieldsTemporalInputTypeView::SaveFormControlState()
diff --git a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h index 7ec1c40..4e21fa2 100644 --- a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h +++ b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h
@@ -107,7 +107,7 @@ void MinOrMaxAttributeChanged() final; void ReadonlyAttributeChanged() final; void RequiredAttributeChanged() final; - void RestoreFormControlState(const FormControlState&) final; + bool RestoreFormControlState(const FormControlState&) final; FormControlState SaveFormControlState() const final; void DidSetValue(const String&, bool value_changed) final; void StepAttributeChanged() final;
diff --git a/third_party/blink/renderer/core/html/forms/password_input_type.cc b/third_party/blink/renderer/core/html/forms/password_input_type.cc index 171ce120..aa054d4 100644 --- a/third_party/blink/renderer/core/html/forms/password_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/password_input_type.cc
@@ -69,9 +69,10 @@ return FormControlState(); } -void PasswordInputType::RestoreFormControlState(const FormControlState&) { +bool PasswordInputType::RestoreFormControlState(const FormControlState&) { // Should never save/restore password fields. NOTREACHED(); + return false; } bool PasswordInputType::ShouldRespectListAttribute() {
diff --git a/third_party/blink/renderer/core/html/forms/password_input_type.h b/third_party/blink/renderer/core/html/forms/password_input_type.h index 10804fb4..9195e2ae 100644 --- a/third_party/blink/renderer/core/html/forms/password_input_type.h +++ b/third_party/blink/renderer/core/html/forms/password_input_type.h
@@ -47,7 +47,7 @@ const AtomicString& FormControlType() const override; bool ShouldSaveAndRestoreFormControlState() const override; FormControlState SaveFormControlState() const override; - void RestoreFormControlState(const FormControlState&) override; + bool RestoreFormControlState(const FormControlState&) override; bool ShouldRespectListAttribute() override; bool NeedsContainer() const override;
diff --git a/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css b/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css index 7ba4b2ba..475e503 100644 --- a/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css +++ b/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css
@@ -41,7 +41,7 @@ } .calendar-navigation-button:hover { - background-color: #E5E5E5; + background-color: rgba(0, 117, 255, 0.3); } .calendar-navigation-button:disabled { @@ -92,7 +92,7 @@ border: 1px solid transparent !important; border-radius: 2px; color: #767676; - padding: 1px; + padding: 1px !important; text-align: center; } @@ -103,28 +103,21 @@ .day-cell.highlighted, .month-button.highlighted, .week-number-cell.highlighted { - background-color: #E5E5E5; + background-color: rgba(0, 117, 255, 0.3); } .day-cell.selected, .month-button.selected, .week-number-cell.selected { - background-color: #CECECE; + background-color: #0075FF; + color: #FFFFFF; font-weight: bold; } .day-cell.highlighted.today, .day-cell.today, .month-button.today { - background-color: #6E6E6E; - border: 0; - color: #FFFFFF; - font-weight: bold; -} - -.day-cell.selected.today, -.month-button.selected.today { - border: 2px solid #CECECE !important; + border-color: #767676 !important; } .day-cell.disabled, @@ -148,7 +141,7 @@ } .today-button-refresh:hover { - background-color: #E5E5E5; + background-color: rgba(0, 117, 255, 0.3); } .today-button-refresh:disabled { @@ -272,14 +265,7 @@ .day-cell.highlighted.today, .day-cell.today, .month-button.today { - background-color: Highlight; - border: 2px solid Window !important; - color: Window; - } - - .day-cell.selected.today, - .month-button.selected.today { - border: 1px solid Window !important; + border-color: WindowText !important; } .day-cell.disabled,
diff --git a/third_party/blink/renderer/core/html/forms/resources/color_picker.css b/third_party/blink/renderer/core/html/forms/resources/color_picker.css index ed9cc009..7ce1de1 100644 --- a/third_party/blink/renderer/core/html/forms/resources/color_picker.css +++ b/third_party/blink/renderer/core/html/forms/resources/color_picker.css
@@ -16,12 +16,12 @@ background: #FFFFFF; display: flex; flex-direction: column; - height: 304px; + height: 250px; width: 232px; } visual-color-picker { - height: 59%; + height: 71.5%; min-height: 0; } @@ -167,31 +167,6 @@ width: 172px; } -submission-controls { - align-items: center; - border-top: 1px solid #CECECE; - display: flex; - flex-direction: row; - height: 13%; - min-height: 0; -} - -#submission-controls-padding { - height: 100%; - width: 84%; -} - -submission-button { - padding: 3%; - text-align: center; - width: 8%; -} - -submission-button:hover { - background-color: #F3F3F3; - border-radius: 2px; -} - @media (forced-colors: active) { color-viewer { forced-color-adjust: none;
diff --git a/third_party/blink/renderer/core/html/forms/resources/color_picker.js b/third_party/blink/renderer/core/html/forms/resources/color_picker.js index a91dcc3..e02931ec 100644 --- a/third_party/blink/renderer/core/html/forms/resources/color_picker.js +++ b/third_party/blink/renderer/core/html/forms/resources/color_picker.js
@@ -425,14 +425,11 @@ super(); this.selectedColor_ = initialColor; + this.colorWhenOpened_ = initialColor; this.visualColorPicker_ = new VisualColorPicker(initialColor); this.manualColorPicker_ = new ManualColorPicker(initialColor); - this.submissionControls_ = new SubmissionControls( - this.onSubmitButtonClick_, this.onCancelButtonClick_); - this.append( - this.visualColorPicker_, this.manualColorPicker_, - this.submissionControls_); + this.append(this.visualColorPicker_, this.manualColorPicker_); this.visualColorPicker_.addEventListener( 'visual-color-picker-initialized', this.initializeListeners_); @@ -480,6 +477,9 @@ this.processingManualColorChange_ = true; this.visualColorPicker_.color = newColor; this.processingManualColorChange_ = false; + + const selectedValue = newColor.asHex(); + window.pagePopupController.setValue(selectedValue); } } @@ -492,6 +492,9 @@ if (!this.processingManualColorChange_) { this.selectedColor = newColor; this.manualColorPicker_.color = newColor; + + const selectedValue = newColor.asHex(); + window.pagePopupController.setValue(selectedValue); } else { // We are making a visual color change in response to a manual color // change. So we do not overwrite the manually specified values and do @@ -506,10 +509,16 @@ onKeyDown_ = (event) => { switch(event.key) { case 'Enter': - this.submissionControls_.submitButton.click(); + window.pagePopupController.closePopup(); break; case 'Escape': - this.submissionControls_.cancelButton.click(); + if (this.selectedColor.equals(this.colorWhenOpened_)) { + window.pagePopupController.closePopup(); + } else { + this.manualColorPicker_.dispatchEvent(new CustomEvent( + 'manual-color-change', + {bubbles: true, detail: {color: this.colorWhenOpened_}})); + } break; case 'Tab': event.preventDefault(); @@ -539,21 +548,6 @@ 'color-value-container:not(.hidden-color-value-container) > input,' + '[tabindex]:not([tabindex=\'-1\'])')); } - - static get COMMIT_DELAY_MS() { - return 100; - } - - onSubmitButtonClick_ = () => { - const selectedValue = this.selectedColor_.asHex(); - window.setTimeout(function() { - window.pagePopupController.setValueAndClosePopup(0, selectedValue); - }, ColorPicker.COMMIT_DELAY_MS); - }; - - onCancelButtonClick_ = () => { - window.pagePopupController.closePopup(); - }; } window.customElements.define('color-picker', ColorPicker); @@ -1873,65 +1867,3 @@ } } window.customElements.define('channel-label', ChannelLabel); - -/** - * SubmissionControls: Provides functionality to submit or discard a change. - */ -class SubmissionControls extends HTMLElement { - /** - * @param {function} submitCallback executed if the submit button is clicked - * @param {function} cancelCallback executed if the cancel button is clicked - */ - constructor(submitCallback, cancelCallback) { - super(); - - const padding = document.createElement('span'); - padding.setAttribute('id', 'submission-controls-padding'); - this.append(padding); - - this.submitButton_ = new SubmissionButton( - submitCallback, - '<svg width="14" height="10" viewBox="0 0 14 10" fill="none" ' + - 'xmlns="http://www.w3.org/2000/svg"><path d="M13.3516 ' + - '1.35156L5 9.71094L0.648438 5.35156L1.35156 4.64844L5 ' + - '8.28906L12.6484 0.648438L13.3516 1.35156Z" fill="WindowText"/></svg>'); - this.cancelButton_ = new SubmissionButton( - cancelCallback, - '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" ' + - 'xmlns="http://www.w3.org/2000/svg"><path d="M7.71094 7L13.1016 ' + - '12.3984L12.3984 13.1016L7 7.71094L1.60156 13.1016L0.898438 ' + - '12.3984L6.28906 7L0.898438 1.60156L1.60156 0.898438L7 ' + - '6.28906L12.3984 0.898438L13.1016 1.60156L7.71094 7Z" ' + - 'fill="WindowText"/></svg>'); - this.append(this.submitButton_, this.cancelButton_); - } - - get submitButton() { - return this.submitButton_; - } - - get cancelButton() { - return this.cancelButton_; - } -} -window.customElements.define('submission-controls', SubmissionControls); - -/** - * SubmissionButton: Button with a custom look that can be clicked for - * a submission action. - */ -class SubmissionButton extends HTMLElement { - /** - * @param {function} clickCallback executed when the button is clicked - * @param {string} htmlString custom look for the button - */ - constructor(clickCallback, htmlString) { - super(); - - this.setAttribute('tabIndex', '0'); - this.innerHTML = htmlString; - - this.addEventListener('click', clickCallback); - } -} -window.customElements.define('submission-button', SubmissionButton);
diff --git a/third_party/blink/renderer/core/html/forms/resources/time_picker.css b/third_party/blink/renderer/core/html/forms/resources/time_picker.css index ebd30d8..cc2c67a 100644 --- a/third_party/blink/renderer/core/html/forms/resources/time_picker.css +++ b/third_party/blink/renderer/core/html/forms/resources/time_picker.css
@@ -52,16 +52,17 @@ } .time-cell:hover { - background: #E5E5E5; + background-color: rgba(0, 117, 255, 0.3); } .time-cell.selected { - background-color: #CECECE; + background-color: #0075FF; + color: #FFFFFF; font-weight: bold; } .time-column:focus .time-cell.selected { - border-color: highlight; + border-color: #101010; } .submission-controls { @@ -91,11 +92,11 @@ } .submission-button:hover { - background-color: #E5E5E5; + background-color: rgba(0, 117, 255, 0.3); } .submission-button:focus { - border-color: highlight; + border-color: #101010; outline: none; }
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 7b9cef8e..985ecec8 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -473,7 +473,6 @@ const ComputedStyle& old_style) { DCHECK(Style()); SnapCoordinator& snap_coordinator = GetDocument().GetSnapCoordinator(); - // scroll-snap-type and scroll-padding invalidate the snap container. if (old_style.GetScrollSnapType() != StyleRef().GetScrollSnapType() || old_style.ScrollPaddingBottom() != StyleRef().ScrollPaddingBottom() ||
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc index 5094150a..f53a7f9 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -718,8 +718,14 @@ // resolve the block-size of the descendant, except when in quirks mode. // Flexboxes follow strict behavior even in quirks mode, though. if (!GetDocument().InQuirksMode() || - cb->IsFlexibleBoxIncludingDeprecatedAndNG()) + cb->IsFlexibleBoxIncludingDeprecatedAndNG()) { + if (this_box && + this_box->HasOverrideContainingBlockContentLogicalHeight()) { + return this_box->OverrideContainingBlockContentLogicalHeight() == + LayoutUnit(-1); + } return !cb->HasDefiniteLogicalHeight(); + } } return false;
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index 722664c..e9082e4 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -29,6 +29,7 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h" #include "third_party/blink/renderer/core/content_capture/content_capture_manager.h" +#include "third_party/blink/renderer/core/dom/dom_node_ids.h" #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/frame_selection.h" @@ -2471,8 +2472,13 @@ DOMNodeId LayoutText::EnsureNodeId() { if (node_id_ == kInvalidDOMNodeId) { - if (auto* content_capture_manager = GetContentCaptureManager()) - node_id_ = content_capture_manager->GetNodeId(*GetNode()); + auto* content_capture_manager = GetContentCaptureManager(); + if (content_capture_manager) + content_capture_manager->ScheduleTaskIfNeeded(); + + // If either content capture or accessibility are enabled, store a node ID. + if (content_capture_manager || GetDocument().ExistingAXObjectCache()) + node_id_ = DOMNodeIds::IdForNode(GetNode()); } return node_id_; }
diff --git a/third_party/blink/renderer/core/page/print_context_test.cc b/third_party/blink/renderer/core/page/print_context_test.cc index cd38040..7c9e9d9 100644 --- a/third_party/blink/renderer/core/page/print_context_test.cc +++ b/third_party/blink/renderer/core/page/print_context_test.cc
@@ -48,6 +48,10 @@ void onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) override { + // Ignore PDF node key annotations, defined in SkPDFDocument.cpp. + if (0 == strcmp(key, "PDF_Node_Key")) + return; + if (rect.width() == 0 && rect.height() == 0) { SkPoint point = getTotalMatrix().mapXY(rect.x(), rect.y()); Operation operation = {kDrawPoint,
diff --git a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.cc b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.cc index 7b510bc..407e72c 100644 --- a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.cc +++ b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.cc
@@ -84,8 +84,6 @@ // A1 A2 A3 +---+ A3 // | | // A1 A2 -// The snap container data does not need to be updated because it will be -// updated at the end of the layout. void SnapCoordinator::AddSnapContainer(LayoutBox& snap_container) { snap_containers_.insert(&snap_container); @@ -107,6 +105,15 @@ } for (auto* snap_area : snap_areas_to_reassign) snap_area->SetSnapContainer(&snap_container); + + // The new snap container will not have attached its ScrollableArea yet, so we + // cannot invalidate the snap container data at this point. However, the snap + // container data is set to needing an update by default, so we only need to + // update the flag for the ancestor. + if (snap_areas_to_reassign.size()) { + ancestor_snap_container->GetScrollableArea() + ->SetSnapContainerDataNeedsUpdate(true); + } } void SnapCoordinator::RemoveSnapContainer(LayoutBox& snap_container) { @@ -119,8 +126,8 @@ // - If it is detached, then we simply clear its snap areas since they will be // detached as well. if (ancestor_snap_container) { - // No need to update the ancestor's snap container data because it will be - // updated at the end of the layout. + ancestor_snap_container->GetScrollableArea() + ->SetSnapContainerDataNeedsUpdate(true); snap_container.ReassignSnapAreas(*ancestor_snap_container); } else { DCHECK(!snap_container.Parent()); @@ -141,12 +148,14 @@ snap_container.GetDocument().documentElement()) return; + PaintLayerScrollableArea* scrollable_area = + snap_container.GetScrollableArea(); // Per specification snap positions only affect *scroll containers* [1]. So if // the layout box is not a scroll container we ignore it here even if it has // non-none scroll-snap-type. Note that in blink, existence of scrollable area // directly maps to being a scroll container in the specification. [1] // https://drafts.csswg.org/css-scroll-snap/#overview - if (!snap_container.GetScrollableArea()) { + if (!scrollable_area) { DCHECK(!snap_containers_.Contains(&snap_container)); return; } @@ -157,9 +166,7 @@ // subtree for whom it is the nearest ancestor scroll container per spec [1]. // // [1] https://drafts.csswg.org/css-scroll-snap/#overview - - // TODO(sunyunjia): Only update when the localframe doesn't need layout. - UpdateSnapContainerData(snap_container); + scrollable_area->SetSnapContainerDataNeedsUpdate(true); } void SnapCoordinator::SnapAreaDidChange(LayoutBox& snap_area, @@ -169,7 +176,7 @@ scroll_snap_align.alignment_block == cc::SnapAlignment::kNone) { snap_area.SetSnapContainer(nullptr); if (old_container) - UpdateSnapContainerData(*old_container); + old_container->GetScrollableArea()->SetSnapContainerDataNeedsUpdate(true); return; } @@ -181,18 +188,21 @@ snap_area.SetSnapContainer(new_container); // TODO(sunyunjia): consider keep the SnapAreas in a map so it is // easier to update. - // TODO(sunyunjia): Only update when the localframe doesn't need layout. - UpdateSnapContainerData(*new_container); + new_container->GetScrollableArea()->SetSnapContainerDataNeedsUpdate(true); if (old_container && old_container != new_container) - UpdateSnapContainerData(*old_container); + old_container->GetScrollableArea()->SetSnapContainerDataNeedsUpdate(true); } } -void SnapCoordinator::ReSnapAllContainers() { +void SnapCoordinator::ResnapAllContainersIfNeeded() { for (const auto* container : snap_containers_) { + if (!container->GetScrollableArea()->NeedsResnap()) + continue; + auto* scrollable_area = ScrollableArea::GetForScrolling(container); ScrollOffset initial_offset = scrollable_area->GetScrollOffset(); scrollable_area->SnapAfterLayout(); + container->GetScrollableArea()->SetNeedsResnap(false); // If this is the first time resnapping all containers then this means this // is the initial layout. We record whenever the initial scroll offset @@ -209,9 +219,11 @@ did_first_resnap_all_containers_ = true; } -void SnapCoordinator::UpdateAllSnapContainerData() { - for (auto* container : snap_containers_) - UpdateSnapContainerData(*container); +void SnapCoordinator::UpdateAllSnapContainerDataIfNeeded() { + for (auto* container : snap_containers_) { + if (container->GetScrollableArea()->SnapContainerDataNeedsUpdate()) + UpdateSnapContainerData(*container); + } } void SnapCoordinator::UpdateSnapContainerData(LayoutBox& snap_container) { @@ -219,6 +231,7 @@ ScrollableArea::GetForScrolling(&snap_container); const auto* old_snap_container_data = scrollable_area->GetSnapContainerData(); auto snap_type = GetPhysicalSnapType(snap_container); + scrollable_area->SetSnapContainerDataNeedsUpdate(false); // Scrollers that don't have any snap areas assigned to them and don't snap // require no further processing. These are the most common types and thus @@ -228,7 +241,6 @@ cc::SnapContainerData snap_container_data(snap_type); - DCHECK(scrollable_area); DCHECK(snap_containers_.Contains(&snap_container)); // When snap type is 'none' we don't perform any snapping so there is no need @@ -306,11 +318,12 @@ } snap_container_data.SetTargetSnapAreaElementIds(new_target_ids); } - if (!old_snap_container_data || *old_snap_container_data != snap_container_data) { snap_container.SetNeedsPaintPropertyUpdate(); scrollable_area->SetSnapContainerData(snap_container_data); + // If the snap container data changed then we need to resnap. + scrollable_area->SetNeedsResnap(true); } }
diff --git a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h index dd73625..11d6a5c 100644 --- a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h +++ b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h
@@ -49,15 +49,17 @@ cc::SnapAreaData CalculateSnapAreaData(const LayoutBox& snap_area, const LayoutBox& snap_container); - // Called by LocalFrameView::PerformPostLayoutTasks(), so that the snap data - // are updated whenever a layout happens. - void UpdateAllSnapContainerData(); - void UpdateSnapContainerData(LayoutBox&); + // Called by Document::PerformScrollSnappingTasks() whenever a style or layout + // change happens. This will update all snap container data that was affected + // by the style/layout change. + void UpdateAllSnapContainerDataIfNeeded(); // Resnaps all snap containers to their current snap target, or to the // closest snap point if there is no target (e.g. on the initial layout or if // the previous snapped target was removed). - void ReSnapAllContainers(); + void ResnapAllContainersIfNeeded(); + + void UpdateSnapContainerData(LayoutBox&); #ifndef NDEBUG void ShowSnapAreaMap();
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc index d4a189e..154cd338 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -1101,7 +1101,9 @@ } else if (!HasScrollbar() && resizer_will_change) { Layer()->DirtyStackingContextZOrderLists(); } - + // The snap container data will be updated at the end of the layout update. If + // the data changes, then this will try to re-snap. + SetSnapContainerDataNeedsUpdate(true); { // Hits in // compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html. @@ -1179,8 +1181,7 @@ // Recalculate the snap container data since the scrolling behaviour for this // layout box changed (i.e. it either became the layout viewport or it // is no longer the layout viewport). - GetLayoutBox()->GetDocument().GetSnapCoordinator().UpdateSnapContainerData( - *GetLayoutBox()); + SetSnapContainerDataNeedsUpdate(true); } bool PaintLayerScrollableArea::ShouldPerformScrollAnchoring() const { @@ -1759,6 +1760,23 @@ return false; } +bool PaintLayerScrollableArea::SnapContainerDataNeedsUpdate() const { + return RareData() ? RareData()->snap_container_data_needs_update_ : false; +} + +void PaintLayerScrollableArea::SetSnapContainerDataNeedsUpdate( + bool needs_update) { + EnsureRareData().snap_container_data_needs_update_ = needs_update; +} + +bool PaintLayerScrollableArea::NeedsResnap() const { + return RareData() ? RareData()->needs_resnap_ : false; +} + +void PaintLayerScrollableArea::SetNeedsResnap(bool needs_resnap) { + EnsureRareData().needs_resnap_ = needs_resnap; +} + base::Optional<FloatPoint> PaintLayerScrollableArea::GetSnapPositionAndSetTarget( const cc::SnapSelectionStrategy& strategy) {
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h index 1994ae9..6a225418 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
@@ -77,6 +77,8 @@ StickyConstraintsMap sticky_constraints_map_; base::Optional<cc::SnapContainerData> snap_container_data_; + bool snap_container_data_needs_update_ = true; + bool needs_resnap_ = false; DISALLOW_COPY_AND_ASSIGN(PaintLayerScrollableAreaRareData); }; @@ -570,6 +572,10 @@ const cc::SnapContainerData* GetSnapContainerData() const override; void SetSnapContainerData(base::Optional<cc::SnapContainerData>) override; bool SetTargetSnapAreaElementIds(cc::TargetSnapAreaElementIds) override; + bool SnapContainerDataNeedsUpdate() const override; + void SetSnapContainerDataNeedsUpdate(bool) override; + bool NeedsResnap() const override; + void SetNeedsResnap(bool) override; base::Optional<FloatPoint> GetSnapPositionAndSetTarget( const cc::SnapSelectionStrategy& strategy) override;
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.h b/third_party/blink/renderer/core/scroll/scrollable_area.h index e34eecd..31754ea 100644 --- a/third_party/blink/renderer/core/scroll/scrollable_area.h +++ b/third_party/blink/renderer/core/scroll/scrollable_area.h
@@ -151,6 +151,10 @@ virtual bool SetTargetSnapAreaElementIds(cc::TargetSnapAreaElementIds) { return false; } + virtual bool SnapContainerDataNeedsUpdate() const { return false; } + virtual void SetSnapContainerDataNeedsUpdate(bool) {} + virtual bool NeedsResnap() const { return false; } + virtual void SetNeedsResnap(bool) {} void SnapAfterScrollbarScrolling(ScrollbarOrientation); // SnapAtCurrentPosition(), SnapForEndPosition(), SnapForDirection(), and
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.cc b/third_party/blink/renderer/modules/cache_storage/cache.cc index df15771..b31fc7f 100644 --- a/third_party/blink/renderer/modules/cache_storage/cache.cc +++ b/third_party/blink/renderer/modules/cache_storage/cache.cc
@@ -90,12 +90,12 @@ if (!RuntimeEnabledFeatures::CacheStorageCodeCacheHintEnabled(context)) return CodeCachePolicy::kAuto; - // We should never see an opaque response here. We should have bailed out - // from generating code cache when we failed to determine its mime type. // It's important we don't look at the header hint for opaque responses since // it could leak cross-origin information. - DCHECK_NE(response->GetResponse()->GetType(), - network::mojom::FetchResponseType::kOpaque); + if (response->GetResponse()->GetType() == + network::mojom::FetchResponseType::kOpaque) { + return CodeCachePolicy::kAuto; + } String header_name( features::kCacheStorageCodeCacheHintHeaderName.Get().data()); @@ -445,6 +445,10 @@ fetch_api_request_ = request->CreateFetchAPIRequest(); fetch_api_response_ = response->PopulateFetchAPIResponse(request->url()); url_ = fetch_api_request_->url; + opaque_mode_ = fetch_api_response_->response_type == + network::mojom::FetchResponseType::kOpaque + ? V8CodeCache::OpaqueMode::kOpaque + : V8CodeCache::OpaqueMode::kNotOpaque; } ~CodeCacheHandleCallbackForPut() override = default;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc index bf7ad06..2c79825c 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -1632,12 +1632,17 @@ NotShared<DOMArrayBufferView>(array_buffer_view), color_settings); } + if (size_in_bytes > std::numeric_limits<unsigned int>::max()) { + exception_state.ThrowRangeError( + "Buffer size exceeds maximum heap object size."); + return nullptr; + } DOMArrayBuffer* array_buffer = DOMArrayBuffer::Create(contents); ImageData* imageData = ImageData::Create( image_data_rect.Size(), NotShared<DOMUint8ClampedArray>(DOMUint8ClampedArray::Create( - array_buffer, 0, array_buffer->DeprecatedByteLengthAsUnsigned())), + array_buffer, 0, static_cast<unsigned int>(size_in_bytes))), color_settings); if (!IsPaint2D()) {
diff --git a/third_party/blink/renderer/modules/encoding/text_decoder.cc b/third_party/blink/renderer/modules/encoding/text_decoder.cc index 4294ad8e..3aeed93 100644 --- a/third_party/blink/renderer/modules/encoding/text_decoder.cc +++ b/third_party/blink/renderer/modules/encoding/text_decoder.cc
@@ -85,9 +85,14 @@ if (input.IsArrayBufferView()) { const char* start = static_cast<const char*>( input.GetAsArrayBufferView().View()->BaseAddress()); - uint32_t length = - input.GetAsArrayBufferView().View()->deprecatedByteLengthAsUnsigned(); - return decode(start, length, options, exception_state); + size_t length = input.GetAsArrayBufferView().View()->byteLengthAsSizeT(); + if (length > std::numeric_limits<uint32_t>::max()) { + exception_state.ThrowRangeError( + "Buffer size exceeds maximum heap object size."); + return String(); + } + return decode(start, static_cast<uint32_t>(length), options, + exception_state); } DCHECK(input.IsArrayBuffer()); const char* start =
diff --git a/third_party/blink/renderer/modules/encoding/text_decoder_stream.cc b/third_party/blink/renderer/modules/encoding/text_decoder_stream.cc index 9ceea47..6b516a6 100644 --- a/third_party/blink/renderer/modules/encoding/text_decoder_stream.cc +++ b/third_party/blink/renderer/modules/encoding/text_decoder_stream.cc
@@ -54,9 +54,15 @@ if (bufferSource.IsArrayBufferView()) { const auto* view = bufferSource.GetAsArrayBufferView().View(); const char* start = static_cast<const char*>(view->BaseAddress()); - uint32_t length = view->deprecatedByteLengthAsUnsigned(); - DecodeAndEnqueue(start, length, WTF::FlushBehavior::kDoNotFlush, - controller, exception_state); + size_t length = view->byteLengthAsSizeT(); + if (length > std::numeric_limits<uint32_t>::max()) { + exception_state.ThrowRangeError( + "Buffer size exceeds maximum heap object size."); + return ScriptPromise(); + } + DecodeAndEnqueue(start, static_cast<uint32_t>(length), + WTF::FlushBehavior::kDoNotFlush, controller, + exception_state); return ScriptPromise::CastUndefined(script_state_); } DCHECK(bufferSource.IsArrayBuffer());
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc index ef4780d..57a27fe 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -294,7 +294,7 @@ } RTCRtpHeaderExtensionParameters* ToRtpHeaderExtensionParameters( - const webrtc::RtpHeaderExtensionParameters& webrtc_header) { + const webrtc::RtpExtension& webrtc_header) { RTCRtpHeaderExtensionParameters* header = RTCRtpHeaderExtensionParameters::Create(); header->setUri(webrtc_header.uri.c_str());
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h index f9accd0..9538b5b 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
@@ -32,7 +32,7 @@ webrtc::RtpEncodingParameters ToRtpEncodingParameters( const RTCRtpEncodingParameters*); RTCRtpHeaderExtensionParameters* ToRtpHeaderExtensionParameters( - const webrtc::RtpHeaderExtensionParameters& headers); + const webrtc::RtpExtension& headers); RTCRtpCodecParameters* ToRtpCodecParameters( const webrtc::RtpCodecParameters& codecs);
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc index cde5716..fc22b7d94 100644 --- a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc +++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
@@ -36,7 +36,6 @@ #include "base/allocator/partition_allocator/partition_alloc.h" #include "base/allocator/partition_allocator/partition_root_base.h" #include "base/debug/alias.h" -#include "base/lazy_instance.h" #include "third_party/blink/renderer/platform/wtf/allocator/partition_allocator.h" #include "third_party/blink/renderer/platform/wtf/wtf.h" @@ -45,63 +44,54 @@ const char* const Partitions::kAllocatedObjectPoolName = "partition_alloc/allocated_objects"; -static base::LazyInstance<base::subtle::SpinLock>::Leaky initialization_lock_ = - LAZY_INSTANCE_INITIALIZER; bool Partitions::initialized_ = false; -// These statics are inlined, so cannot be LazyInstances. We create -// LazyInstances below, and then set the pointers correctly in Initialize(). +// These statics are inlined, so cannot be LazyInstances. We create the values, +// and then set the pointers correctly in Initialize(). base::PartitionRootGeneric* Partitions::fast_malloc_root_ = nullptr; base::PartitionRootGeneric* Partitions::array_buffer_root_ = nullptr; base::PartitionRootGeneric* Partitions::buffer_root_ = nullptr; base::PartitionRoot* Partitions::layout_root_ = nullptr; -static base::LazyInstance<base::PartitionAllocatorGeneric>::Leaky - lazy_fast_malloc = LAZY_INSTANCE_INITIALIZER; -static base::LazyInstance<base::PartitionAllocatorGeneric>::Leaky - lazy_array_buffer = LAZY_INSTANCE_INITIALIZER; -static base::LazyInstance<base::PartitionAllocatorGeneric>::Leaky lazy_buffer = - LAZY_INSTANCE_INITIALIZER; -static base::LazyInstance<base::SizeSpecificPartitionAllocator<1024>>::Leaky - lazy_layout = LAZY_INSTANCE_INITIALIZER; - +// static void Partitions::Initialize() { - base::subtle::SpinLock::Guard guard(initialization_lock_.Get()); + static bool initialized = InitializeOnce(); + DCHECK(initialized); +} - if (!initialized_) { - base::PartitionAllocatorGeneric* fast_malloc_allocator = - lazy_fast_malloc.Pointer(); - base::PartitionAllocatorGeneric* array_buffer_allocator = - lazy_array_buffer.Pointer(); - base::PartitionAllocatorGeneric* buffer_allocator = lazy_buffer.Pointer(); - base::SizeSpecificPartitionAllocator<1024>* layout_allocator = - lazy_layout.Pointer(); +// static +bool Partitions::InitializeOnce() { + static base::PartitionAllocatorGeneric fast_malloc_allocator{}; + static base::PartitionAllocatorGeneric array_buffer_allocator{}; + static base::PartitionAllocatorGeneric buffer_allocator{}; + static base::SizeSpecificPartitionAllocator<1024> layout_allocator{}; - base::PartitionAllocGlobalInit(&Partitions::HandleOutOfMemory); - fast_malloc_allocator->init(); - array_buffer_allocator->init(); - buffer_allocator->init(); - layout_allocator->init(); + base::PartitionAllocGlobalInit(&Partitions::HandleOutOfMemory); - fast_malloc_root_ = fast_malloc_allocator->root(); - array_buffer_root_ = array_buffer_allocator->root(); - buffer_root_ = buffer_allocator->root(); - layout_root_ = layout_allocator->root(); + fast_malloc_allocator.init(); + array_buffer_allocator.init(); + buffer_allocator.init(); + layout_allocator.init(); - initialized_ = true; - } + fast_malloc_root_ = fast_malloc_allocator.root(); + array_buffer_root_ = array_buffer_allocator.root(); + buffer_root_ = buffer_allocator.root(); + layout_root_ = layout_allocator.root(); + + initialized_ = true; + return initialized_; } // static void Partitions::StartPeriodicReclaim( scoped_refptr<base::SequencedTaskRunner> task_runner) { CHECK(IsMainThread()); - if (!initialized_) - return; + DCHECK(initialized_); base::PartitionAllocMemoryReclaimer::Instance()->Start(task_runner); } +// static void Partitions::DumpMemoryStats( bool is_light_dump, base::PartitionStatsDumper* partition_stats_dumper) { @@ -141,6 +131,7 @@ } // namespace +// static size_t Partitions::TotalSizeOfCommittedPages() { DCHECK(initialized_); size_t total_size = 0; @@ -151,6 +142,7 @@ return total_size; } +// static size_t Partitions::TotalActiveBytes() { LightPartitionStatsDumperImpl dumper; WTF::Partitions::DumpMemoryStats(true, &dumper); @@ -212,35 +204,43 @@ << base::GetAllocPageErrorCode() << ")"; } +// static void* Partitions::BufferMalloc(size_t n, const char* type_name) { return BufferPartition()->Alloc(n, type_name); } +// static void* Partitions::BufferTryRealloc(void* p, size_t n, const char* type_name) { return BufferPartition()->TryRealloc(p, n, type_name); } +// static void Partitions::BufferFree(void* p) { BufferPartition()->Free(p); } +// static size_t Partitions::BufferActualSize(size_t n) { return BufferPartition()->ActualSize(n); } +// static void* Partitions::FastMalloc(size_t n, const char* type_name) { return FastMallocPartition()->Alloc(n, type_name); } +// static void* Partitions::FastZeroedMalloc(size_t n, const char* type_name) { return FastMallocPartition()->AllocFlags(base::PartitionAllocZeroFill, n, type_name); } +// static void Partitions::FastFree(void* p) { FastMallocPartition()->Free(p); } +// static void Partitions::HandleOutOfMemory() { volatile size_t total_usage = TotalSizeOfCommittedPages(); uint32_t alloc_page_error_code = base::GetAllocPageErrorCode();
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.h b/third_party/blink/renderer/platform/wtf/allocator/partitions.h index 48e833a..4660baf 100644 --- a/third_party/blink/renderer/platform/wtf/allocator/partitions.h +++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.h
@@ -50,6 +50,7 @@ // memory snapshots. static const char* const kAllocatedObjectPoolName; + // Should be called on the thread which is or will become the main one. static void Initialize(); static void StartPeriodicReclaim( scoped_refptr<base::SequencedTaskRunner> task_runner); @@ -98,8 +99,9 @@ return fast_malloc_root_; } - static bool initialized_; + static bool InitializeOnce(); + static bool initialized_; // See Allocator.md for a description of these partitions. static base::PartitionRootGeneric* fast_malloc_root_; static base::PartitionRootGeneric* array_buffer_root_;
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 3c31098..e3e8ba09 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -454,3 +454,5 @@ # MathML depends on LayoutNG. crbug.com/6606 external/wpt/mathml/* [ Skip ] + +crbug.com/1034944 webexposed/global-interface-listing.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2fbe7b0..a9c6d453 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1326,7 +1326,6 @@ crbug.com/845235 virtual/layout_ng_flex_box/css3/flexbox/minimum-size-image.html [ Failure ] crbug.com/845235 virtual/layout_ng_flex_box/css3/flexbox/negative-overflow.html [ Failure ] crbug.com/845235 virtual/layout_ng_flex_box/css3/flexbox/overflow-auto-resizes-correctly.html [ Failure ] -crbug.com/845235 virtual/layout_ng_flex_box/css3/flexbox/percentage-height-replaced-element.html [ Failure ] crbug.com/845235 virtual/layout_ng_flex_box/css3/flexbox/relpos-with-percentage-top.html [ Failure ] crbug.com/845235 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flexbox_inline.html [ Failure ] crbug.com/845235 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-004.html [ Failure ] @@ -3678,6 +3677,7 @@ crbug.com/1035708 external/wpt/css/css-pseudo/grammar-error-001.html [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Win7 ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Timeout ] crbug.com/626703 [ Mac ] external/wpt/css/css-text-decor/text-decoration-subelements-002.html [ Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-text-decor/text-decoration-subelements-002.html [ Failure ] crbug.com/626703 [ Win7 ] external/wpt/content-security-policy/object-src/object-src-no-url-allowed.html [ Timeout ] @@ -3872,7 +3872,6 @@ crbug.com/626703 [ Linux ] external/wpt/shadow-dom/directionality-002.tentative.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/shadow-dom/directionality-002.tentative.html [ Failure ] crbug.com/626703 [ Win ] external/wpt/shadow-dom/directionality-002.tentative.html [ Failure ] -crbug.com/626703 [ Mac10.10 ] external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html [ Failure Timeout ] crbug.com/626703 [ Mac10.13 ] wpt_internal/display-lock/rendersubtree/activation/selection.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/css/css-lists/li-value-reversed-005.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/css/css-lists/li-value-reversed-005.html [ Failure ] @@ -7051,7 +7050,6 @@ # Sheriff 2019-11-29 crbug.com/1019079 virtual/gpu/fast/canvas/OffscreenCanvas-placeholder-createImageBitmap.html [ Pass Failure ] crbug.com/1019079 fast/canvas/OffscreenCanvas-placeholder-createImageBitmap.html [ Pass Failure ] -crbug.com/1027435 [ Mac ] external/wpt/html/cross-origin-opener-policy/popup-none.https.html [ Pass Timeout ] crbug.com/1027434 external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html [ Pass Timeout ] crbug.com/1027434 virtual/not-site-per-process/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html [ Pass Timeout ] @@ -7152,7 +7150,6 @@ crbug.com/1036626 http/tests/devtools/tracing/tracing-record-input-events.js [ Pass Failure ] crbug.com/1036626 virtual/threaded/http/tests/devtools/tracing/tracing-record-input-events.js [ Pass Failure ] crbug.com/1036054 [ Mac10.13 ] virtual/threaded/fast/scroll-snap/snap-to-area-with-fractional-offset.html [ Pass Timeout ] -crbug.com/960944 animations/web-animations/animation-state-changes-positive-playback-rate.html [ Pass Failure ] crbug.com/1033381 synthetic_gestures/smooth-scroll-tiny-delta.html [ Pass Crash ] # Sheriff 2019-12-27
diff --git a/third_party/blink/web_tests/animations/composition/color-composition.html b/third_party/blink/web_tests/animations/composition/color-composition.html deleted file mode 100644 index 1973a02..0000000 --- a/third_party/blink/web_tests/animations/composition/color-composition.html +++ /dev/null
@@ -1,42 +0,0 @@ -<!DOCTYPE html> -<meta charset="UTF-8"> -<style> -.target { - width: 40px; - height: 40px; - background-color: black; -} -.expected { - background-color: green; -} -</style> -<body> -<script src="../interpolation/resources/interpolation-test.js"></script> -<script> -assertComposition({ - property: 'color', - underlying: 'rgb(50, 50, 50)', - addFrom: 'rgb(10, 10, 10)', - replaceTo: 'rgb(30, 30, 30)', -}, [ - {at: 0, is: 'rgb(60, 60, 60)'}, - {at: 0.2, is: 'rgb(54, 54, 54)'}, - {at: 1, is: 'rgb(30, 30, 30)'}, - {at: 1.2, is: 'rgb(24, 24, 24)'}, - {at: 1.5, is: 'rgb(15, 15, 15)'}, -]); - -assertComposition({ - property: 'color', - underlying: 'rgb(60, 60, 60)', - addFrom: 'rgb(0, 0, 0)', - replaceTo: 'rgb(50, 50, 50)', -}, [ - {at: 0, is: 'rgb(60, 60, 60)'}, - {at: 0.5, is: 'rgb(55, 55, 55)'}, - {at: 1, is: 'rgb(50, 50, 50)'}, - {at: 1.2, is: 'rgb(48, 48, 48)'}, - {at: 1.5, is: 'rgb(45, 45, 45)'}, -]); -</script> -</body>
diff --git a/third_party/blink/web_tests/animations/composition/flex-basis-composition.html b/third_party/blink/web_tests/animations/composition/flex-basis-composition.html deleted file mode 100644 index 52fb0e5..0000000 --- a/third_party/blink/web_tests/animations/composition/flex-basis-composition.html +++ /dev/null
@@ -1,71 +0,0 @@ -<!DOCTYPE html> -<meta charset="UTF-8"> -<body> -<script src="../interpolation/resources/interpolation-test.js"></script> -<script> -assertComposition({ - property: 'flex-basis', - underlying: '50px', - addFrom: '100px', - addTo: '200px', -}, [ - {at: -0.3, is: '120px'}, - {at: 0, is: '150px'}, - {at: 0.5, is: '200px'}, - {at: 1, is: '250px'}, - {at: 1.5, is: '300px'}, -]); - -assertComposition({ - property: 'flex-basis', - underlying: '100px', - addFrom: '10px', - addTo: '2px', -}, [ - {at: -0.5, is: '114px'}, - {at: 0, is: '110px'}, - {at: 0.5, is: '106px'}, - {at: 1, is: '102px'}, - {at: 1.5, is: '98px'}, // Value clamping should happen after composition. -]); - -assertComposition({ - property: 'flex-basis', - underlying: '10%', - addFrom: '100px', - addTo: '20%', -}, [ - {at: -0.3, is: 'calc(130px + 4%)'}, - {at: 0, is: 'calc(100px + 10%)'}, - {at: 0.5, is: 'calc(50px + 20%)'}, - {at: 1, is: '30%'}, - {at: 1.5, is: 'calc(-50px + 40%)'}, -]); - -assertComposition({ - property: 'flex-basis', - underlying: '50px', - addFrom: '100px', - replaceTo: '200px', -}, [ - {at: -0.3, is: '135px'}, - {at: 0, is: '150px'}, - {at: 0.5, is: '175px'}, - {at: 1, is: '200px'}, - {at: 1.5, is: '225px'}, -]); - -assertComposition({ - property: 'flex-basis', - underlying: '100px', - addFrom: '100px', - addTo: 'auto', -}, [ - {at: -0.3, is: '200px'}, - {at: 0, is: '200px'}, - {at: 0.5, is: 'auto'}, - {at: 1, is: 'auto'}, - {at: 1.5, is: 'auto'}, -]); -</script> -</body>
diff --git a/third_party/blink/web_tests/animations/web-animations/animation-state-changes-positive-playback-rate.html b/third_party/blink/web_tests/animations/web-animations/animation-state-changes-positive-playback-rate.html index 533ef73..9fd29693 100644 --- a/third_party/blink/web_tests/animations/web-animations/animation-state-changes-positive-playback-rate.html +++ b/third_party/blink/web_tests/animations/web-animations/animation-state-changes-positive-playback-rate.html
@@ -61,14 +61,14 @@ test(function(t) { var animation = createRunningAnimation(t); assert_times_equal(animation.startTime, document.timeline.currentTime - animation.currentTime); - assert_equals(animation.currentTime, 0); + assert_times_equal(animation.currentTime, 0); assert_equals(animation.playState, 'running'); }, "Play state is running after playing and setting start time of a canceled animation"); test(function(t) { var animation = createPausedAnimation(t); assert_equals(animation.startTime, null); - assert_equals(animation.currentTime, 0); + assert_times_equal(animation.currentTime, 0); assert_equals(animation.playState, 'paused'); }, "Play state is paused after pausing and setting current time of a canceled animation"); @@ -206,13 +206,20 @@ assert_equals(animation.playState, 'running'); }, "Setting startTime on a pending starttime animation"); -test(function(t) { +promise_test(async (t) => { var animation = createRunningAnimation(t); + assert_false(animation.pending); + // Advance the animation from the start boundary. Otherwise the test is + // prone to flaking. The initial value of current time is 0 +/- epsilon. If + // negative, the hold time is reset and a pending play is triggered, clamped + // to the starting boundary per spec. Conversely, if the animation is playing + // and current time is within bounds, then play is a no-op. + await waitForAnimationFrames(1); var startTime = animation.startTime; var currentTime = animation.currentTime; animation.play(); - assert_equals(animation.startTime, startTime); - assert_equals(animation.currentTime, currentTime); + assert_times_equal(animation.startTime, startTime); + assert_times_equal(animation.currentTime, currentTime); assert_false(animation.pending); assert_equals(animation.playState, 'running'); }, "Setting play() on a running animation"); @@ -221,7 +228,7 @@ var animation = createRunningAnimation(t); animation.pause(); assert_not_equals(animation.startTime, null); - assert_equals(animation.currentTime, 0); + assert_times_equal(animation.currentTime, 0); assert_true(animation.pending); assert_equals(animation.playState, 'paused'); animation.ready.then(t.step_func_done(() => { @@ -251,14 +258,20 @@ test(function(t) { var animation = createRunningAnimation(t); + // Ensure the current time is precisely zero. We create a non-pending running + // animation by explicitly setting the start time to the timeline time. This + // is insufficient to ensure that we are precisely on the starting boundary + // due to floating point precision errors. If the resulting value of current + // time is slightly greater than zero, rather than snapping to the end point, + // the animation will simply reverse direction per spec. + animation.currentTime = 0; animation.reverse(); assert_equals(animation.startTime, null); - assert_equals(animation.currentTime, 100000); + assert_times_equal(animation.currentTime, 100000); assert_true(animation.pending); assert_equals(animation.playState, 'running'); }, "Setting reverse() on a running animation"); - test(function(t) { var animation = createRunningAnimation(t); animation.currentTime = 1000;
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json index bac8b7d..75e660f 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -36757,6 +36757,18 @@ {} ] ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html": [ + [ + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html", + [ + [ + "/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-color/border-bottom-color.xht": [ [ "css/css-color/border-bottom-color.xht", @@ -135834,6 +135846,18 @@ "css/css-color-adjust/parsing/color-scheme-valid-expected.txt": [ [] ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-ref.html": [ + [] + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/assert-preferred-dark.css": [ + [] + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/dark-frame-ref.html": [ + [] + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/dark-frame.html": [ + [] + ], "css/css-color/LICENSE": [ [] ], @@ -160713,43 +160737,151 @@ "html/cross-origin-opener-policy/coop-sandbox.https.html.headers": [ [] ], + "html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.headers": [ + [] + ], "html/cross-origin-opener-policy/no-https-expected.txt": [ [] ], "html/cross-origin-opener-policy/no-https.html.headers": [ [] ], + "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html.headers": [ + [] + ], "html/cross-origin-opener-policy/popup-none.https-expected.txt": [ [] ], "html/cross-origin-opener-policy/popup-redirect-cache.https.html.headers": [ [] ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.headers": [ + [] + ], "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html.headers": [ [] ], "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https-expected.txt": [ [] ], - "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers": [ + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.headers": [ [] ], "html/cross-origin-opener-policy/popup-same-origin.https-expected.txt": [ [] ], - "html/cross-origin-opener-policy/popup-same-origin.https.html.headers": [ - [] - ], "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https-expected.txt": [ [] ], - "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers": [ - [] - ], "html/cross-origin-opener-policy/popup-same-site.https-expected.txt": [ [] ], - "html/cross-origin-opener-policy/popup-same-site.https.html.headers": [ + "html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html.headers": [ + [] + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-site.https-expected.txt": [ + [] + ], + "html/cross-origin-opener-policy/resources/call-functionCalledByOpenee.html": [ [] ], "html/cross-origin-opener-policy/resources/common.js": [ @@ -163770,15 +163902,9 @@ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.https.html.headers": [ [] ], - "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-extra-expected.txt": [ - [] - ], "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt": [ [] ], - "html/infrastructure/safe-passing-of-structured-data/structuredclone_0-expected.txt": [ - [] - ], "html/infrastructure/safe-passing-of-structured-data/transfer-errors.window-expected.txt": [ [] ], @@ -175074,6 +175200,18 @@ "service-workers/service-worker/resources/opaque-response-preloaded-xhr.html": [ [] ], + "service-workers/service-worker/resources/opaque-script-frame.html": [ + [] + ], + "service-workers/service-worker/resources/opaque-script-large.js": [ + [] + ], + "service-workers/service-worker/resources/opaque-script-small.js": [ + [] + ], + "service-workers/service-worker/resources/opaque-script-sw.js": [ + [] + ], "service-workers/service-worker/resources/other.html": [ [] ], @@ -175995,30 +176133,6 @@ "streams/transform-streams/properties.any.worker-expected.txt": [ [] ], - "streams/writable-streams/brand-checks.any-expected.txt": [ - [] - ], - "streams/writable-streams/brand-checks.any.serviceworker-expected.txt": [ - [] - ], - "streams/writable-streams/brand-checks.any.sharedworker-expected.txt": [ - [] - ], - "streams/writable-streams/brand-checks.any.worker-expected.txt": [ - [] - ], - "streams/writable-streams/close.any-expected.txt": [ - [] - ], - "streams/writable-streams/close.any.serviceworker-expected.txt": [ - [] - ], - "streams/writable-streams/close.any.sharedworker-expected.txt": [ - [] - ], - "streams/writable-streams/close.any.worker-expected.txt": [ - [] - ], "streams/writable-streams/constructor.any-expected.txt": [ [] ], @@ -212278,6 +212392,12 @@ {} ] ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html": [ + [ + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html", + {} + ] + ], "css/css-color/animation/color-interpolation.html": [ [ "css/css-color/animation/color-interpolation.html", @@ -247449,14 +247569,6 @@ {} ] ], - "fetch/metadata/appcache.tentative.https.sub.html": [ - [ - "fetch/metadata/appcache.tentative.https.sub.html", - { - "timeout": "long" - } - ] - ], "fetch/metadata/download.tentative.https.sub.html": [ [ "fetch/metadata/download.tentative.https.sub.html", @@ -250709,6 +250821,66 @@ {} ] ], + "html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html": [ + [ + "html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html", + {} + ] + ], "html/cross-origin-opener-policy/no-https.html": [ [ "html/cross-origin-opener-policy/no-https.html", @@ -250717,12 +250889,6 @@ } ] ], - "html/cross-origin-opener-policy/popup-none.https.html": [ - [ - "html/cross-origin-opener-policy/popup-none.https.html", - {} - ] - ], "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [ [ "html/cross-origin-opener-policy/popup-redirect-cache.https.html", @@ -250731,33 +250897,81 @@ } ] ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html": [ + [ + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html", + {} + ] + ], "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html": [ [ "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html", {} ] ], - "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html": [ + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html": [ [ - "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html", + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html", {} ] ], - "html/cross-origin-opener-policy/popup-same-origin.https.html": [ + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html": [ [ - "html/cross-origin-opener-policy/popup-same-origin.https.html", + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html", {} ] ], - "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html": [ + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html": [ [ - "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html", + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html", {} ] ], - "html/cross-origin-opener-policy/popup-same-site.https.html": [ + "html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html": [ [ - "html/cross-origin-opener-policy/popup-same-site.https.html", + "html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html": [ + [ + "html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html": [ + [ + "html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html", + {} + ] + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html": [ + [ + "html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html", {} ] ], @@ -300294,6 +300508,12 @@ {} ] ], + "service-workers/service-worker/opaque-script.https.html": [ + [ + "service-workers/service-worker/opaque-script.https.html", + {} + ] + ], "service-workers/service-worker/performance-timeline.https.html": [ [ "service-workers/service-worker/performance-timeline.https.html", @@ -375461,6 +375681,30 @@ "5fb481783f0134b3b233ceb17ea4a0897eeee403", "testharness" ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-ref.html": [ + "8cc4618ede4af030adc8fe5f119deccf3c2e3882", + "support" + ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html": [ + "ee0f006b5b25702f0b2c485c46e7b8ef6788147c", + "reftest" + ], + "css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html": [ + "a6363971819a44e4bfc29891cbf51af6d24d1279", + "testharness" + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/assert-preferred-dark.css": [ + "73671b8a819ed81958b4359a1a3904f86cc98ec6", + "support" + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/dark-frame-ref.html": [ + "0975119f56eee163041d58b96b80bd57173c44a9", + "support" + ], + "css/css-color-adjust/rendering/dark-color-scheme/support/dark-frame.html": [ + "11f88db4a0b3e94d620b5a92314c88040210cfae", + "support" + ], "css/css-color/LICENSE": [ "d47f50cca8a2d9dc40dee384ae256f8aecf44e0a", "support" @@ -451565,10 +451809,6 @@ "34864d4a4b6bd911f496026ada7bdc41ba3a6905", "support" ], - "fetch/metadata/appcache.tentative.https.sub.html": [ - "3dc47c696fb87ead0ef808b99b7e6e52cff01ebe", - "testharness" - ], "fetch/metadata/download.tentative.https.sub.html": [ "6f2a0434d497f695a44cc0d8972083d7cfa194c9", "testharness" @@ -451630,7 +451870,7 @@ "testharness" ], "fetch/metadata/portal.tentative.https.sub.html": [ - "4e50b6b24b356dac6c6c7f5b7d17b7f4f01431c1", + "96067ae82ab7838784f6350dda7cee7840e277f8", "testharness" ], "fetch/metadata/prefetch.tentative.https.sub.html": [ @@ -451734,7 +451974,7 @@ "support" ], "fetch/metadata/resources/record-header.py": [ - "3bfb1fcdfaab6f166149b5a451f58e82bbc48531", + "364c800a19ce6f2060a97019d222acbf71045e93", "support" ], "fetch/metadata/resources/redirectTestHelper.sub.js": [ @@ -456606,11 +456846,11 @@ "support" ], "html/cross-origin-opener-policy/coep-navigate-popup.https-expected.txt": [ - "6e7f6000788e5608abc228f08a3ea4efa1f59b44", + "d9c62f210493f525df32e97eeeeff2f3c4c732e0", "support" ], "html/cross-origin-opener-policy/coep-navigate-popup.https.html": [ - "21320a61b2eaa8b17cbb518d2028a5dce4134bf7", + "faa2793e5faaa81d4d819110ec1045dac9d9cde0", "testharness" ], "html/cross-origin-opener-policy/coep-navigate-popup.https.html.headers": [ @@ -456618,11 +456858,11 @@ "support" ], "html/cross-origin-opener-policy/coep-redirect.https-expected.txt": [ - "faa2c84f0aba957cf77f69e3affa823b82e0ccc1", + "e9b52b67bfb7f2d36dbb0f0620fd59fb74952702", "support" ], "html/cross-origin-opener-policy/coep-redirect.https.html": [ - "73f07ddef88877aacf36ea43d47cc7aee85e5508", + "2727013783fa3d3c6a26f6746c1a0c28c59fdf19", "testharness" ], "html/cross-origin-opener-policy/coep-redirect.https.html.headers": [ @@ -456630,11 +456870,11 @@ "support" ], "html/cross-origin-opener-policy/coep.https-expected.txt": [ - "1bafd5c64254df00d9681048d3e2e3c3d6904a98", + "047797b928685a3ea285074a8e19337c8dbb1ada", "support" ], "html/cross-origin-opener-policy/coep.https.html": [ - "64994cdfb76f18cb11c42cc8258209fcfd1091e3", + "de1dd56d9d55e5e3f1de62b16058139204c2e098", "testharness" ], "html/cross-origin-opener-policy/coep.https.html.headers": [ @@ -456646,11 +456886,11 @@ "support" ], "html/cross-origin-opener-policy/coop-navigated-popup.https.html": [ - "9a92dd9bde885e9e3ee19c6e4ef93a0e7b82e418", + "3c6019ace0b308562cca08d6d6bfd6484882e1db", "testharness" ], "html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers": [ - "a19f4400cea33a60c99807330704a23ee363b146", + "d83ed86fb9b5d159b9f380424887402edc96cb75", "support" ], "html/cross-origin-opener-policy/coop-sandbox.https-expected.txt": [ @@ -456658,33 +456898,149 @@ "support" ], "html/cross-origin-opener-policy/coop-sandbox.https.html": [ - "e471b1eda2ef28a1022e86a9d254608d02578e55", + "fc16c186cadf44bd1639d0eacf610e7781bc02bd", "testharness" ], "html/cross-origin-opener-policy/coop-sandbox.https.html.headers": [ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", "support" ], + "html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https-expected.txt": [ + "6d6f5a8a39f9067791a50196efee7c192501a9d3", + "support" + ], + "html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html": [ + "73ef1ea29a2e91f0e4f9a9867081fe8aa5a9c81b", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https-expected.txt": [ + "d32242d56b241f89bca2069fd7d61c3430b192dd", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html": [ + "a8b6d543cd018b06b962b4ad1ef41b8c043ae496", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [ + "a19f4400cea33a60c99807330704a23ee363b146", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https-expected.txt": [ + "cba1078fac2abf01e803cf457749dda42c72719d", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html": [ + "aaaae2dc31799bc46d58424133edb47a8b31794c", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.headers": [ + "a19f4400cea33a60c99807330704a23ee363b146", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https-expected.txt": [ + "5800c6926081f9401f3d9a3ac477020f9b3c1082", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html": [ + "fd58b06f783966f2ad24c2c2443c422fce2e94d0", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.headers": [ + "a19f4400cea33a60c99807330704a23ee363b146", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https-expected.txt": [ + "8378675c31168bc2069059b273bcb2a2a2eeea62", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html": [ + "7330ff75bcff697490ee248f938bdbb9c79f6b88", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [ + "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https-expected.txt": [ + "9f6a422bd55948d64dabc1ed820f318aaa2065d5", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html": [ + "01cc6719fd3a202514444765ff6a4e4d2153f2f1", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.headers": [ + "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https-expected.txt": [ + "9074e943550e1ad52d363680e32af7c6ee8b19e6", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html": [ + "b1a664dd9a5b8e8dd4cf561a31f85e8f2e88ae2d", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.headers": [ + "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https-expected.txt": [ + "f4b869b13751d1bcfaa135ed97cc0b90de380c24", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html": [ + "d0fc7c79841eab57d810566e4eedc3e4f338d954", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html.headers": [ + "34bd099a302f893f92586241ea38aac812bf28d0", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https-expected.txt": [ + "238602183d4a112b593ef9fde6a2cedc01a150d4", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html": [ + "67d2523e28d9af525449a192f659d5be1768532c", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.headers": [ + "34bd099a302f893f92586241ea38aac812bf28d0", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https-expected.txt": [ + "36b770971ed575bb987ae8bc2403079da52469ae", + "support" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html": [ + "78b7ca8fcad0f5a68dbf3fefd3d1945564783fad", + "testharness" + ], + "html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.headers": [ + "34bd099a302f893f92586241ea38aac812bf28d0", + "support" + ], "html/cross-origin-opener-policy/no-https-expected.txt": [ "9cd8ef4d5ac82b925031ad0a6bfe876cd26e05fc", "support" ], "html/cross-origin-opener-policy/no-https.html": [ - "014ba1f333b5e254609819bd99618ebcc6b7391b", + "f4e926b2eb2838c443f2e8f4d3bc024e719039a7", "testharness" ], "html/cross-origin-opener-policy/no-https.html.headers": [ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", "support" ], + "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html.headers": [ + "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", + "support" + ], "html/cross-origin-opener-policy/popup-none.https-expected.txt": [ "441401ec1eb68b9cc27167f78234bb99231dfaab", "support" ], - "html/cross-origin-opener-policy/popup-none.https.html": [ - "62633457d3f57135658fb4bdf959fce278dc9851", - "testharness" - ], "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [ "0524878a03a8d3764c63b77b5c8c4f1453c5a288", "testharness" @@ -456693,8 +457049,44 @@ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", "support" ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https-expected.txt": [ + "21a13c3c4e2714cf1489b46a3c6ee4c403c0c4dd", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html": [ + "cea3788ba83d41a97b3b59bd2744db079f272a45", + "testharness" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.headers": [ + "d83ed86fb9b5d159b9f380424887402edc96cb75", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https-expected.txt": [ + "2fc12a7ebd137f8bbb59db0d642512437231c84e", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html": [ + "a50231f82287b03d15c186472767c215035886f6", + "testharness" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.headers": [ + "d83ed86fb9b5d159b9f380424887402edc96cb75", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https-expected.txt": [ + "001f3bbdff9f6d878fc4b5a496089ce8fc1f977a", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html": [ + "53b4263a70fd41bd044440abeddce3b9585e5850", + "testharness" + ], + "html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.headers": [ + "d83ed86fb9b5d159b9f380424887402edc96cb75", + "support" + ], "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html": [ - "65ec3b26aa0c6e7e5df857bde88f67d394af2e9e", + "d4005ac20d8d7d9b215fe73785d9a1a3466fcef3", "testharness" ], "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html.headers": [ @@ -456705,48 +457097,108 @@ "559011a753fb7333312e49f7d67b4dfa3a7c7137", "support" ], - "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html": [ - "2f8ebc3be3fcc7e23e64c95d5ceaaf83dfa1f67f", + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https-expected.txt": [ + "269243a55ba2a61110b354e34b0c7cf7ecfcc715", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html": [ + "9f7d27b3c8dc381f893c6ccf84c463db7f503f9b", "testharness" ], - "html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers": [ - "a19f4400cea33a60c99807330704a23ee363b146", + "html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.headers": [ + "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https-expected.txt": [ + "cc419c0cd22cc7f46bf9c703b252d6c5500aafb5", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html": [ + "c84219a80f5c83ca6e4dc244406db9f05461fa83", + "testharness" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html.headers": [ + "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https-expected.txt": [ + "4dec82fe2014cbd8ad4e30bf0baf1d4e2ad27497", + "support" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html": [ + "b875cc2e0e4abbc215be36111a22414f72126138", + "testharness" + ], + "html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.headers": [ + "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", "support" ], "html/cross-origin-opener-policy/popup-same-origin.https-expected.txt": [ "0d082385b18e4696af0a53b727bec932fb86af6b", "support" ], - "html/cross-origin-opener-policy/popup-same-origin.https.html": [ - "964011ff7621155446925010c143b025954a5a61", - "testharness" - ], - "html/cross-origin-opener-policy/popup-same-origin.https.html.headers": [ - "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", - "support" - ], "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https-expected.txt": [ "2dfbfd706e72c10acd53822964ef477939ea1385", "support" ], - "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html": [ - "18ee909d1865567706674b75b40a6615ef75908c", - "testharness" - ], - "html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers": [ - "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2", - "support" - ], "html/cross-origin-opener-policy/popup-same-site.https-expected.txt": [ "dd1e4548e8bd75f0610ce3fa58abc128264755c0", "support" ], - "html/cross-origin-opener-policy/popup-same-site.https.html": [ - "9a0db2765daeb445a892a8ece7347c6b97f24917", + "html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https-expected.txt": [ + "7b65f9dcae0b2235ab125df57140d08468f55706", + "support" + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html": [ + "5cbf5b4c20c9b89c5cf946ebeea1733fbfb57c2c", "testharness" ], - "html/cross-origin-opener-policy/popup-same-site.https.html.headers": [ - "34bd099a302f893f92586241ea38aac812bf28d0", + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https-expected.txt": [ + "e3c145272eb286e80430522070b5937e6039a419", + "support" + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html": [ + "f8a4ebe71288d6071f3d644607132a32b0c63f79", + "testharness" + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html.headers": [ + "073ce7adfbd81cb7c0b2f91f96c8349b6677f26c", + "support" + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https-expected.txt": [ + "92e7b753fd95de3fb8257dd291b21795a8e0c9f8", + "support" + ], + "html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html": [ + "e38acf4fcb1e1d0b039894013ab56e011c5efa8f", + "testharness" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https-expected.txt": [ + "33d61be1206ab235f54bd81b345c67b20741f9fd", + "support" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html": [ + "d89398cd653de327a10ff53b58b29a62e422ffb8", + "testharness" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https-expected.txt": [ + "627aa8ae561d3b6b0ac82b2a8f7355cd533aaa66", + "support" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html": [ + "cb6fc02ac171f606cb00a315d327062d13f32e91", + "testharness" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-site.https-expected.txt": [ + "ff97a46be8fe358d7232ba585ba9980940346202", + "support" + ], + "html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html": [ + "6e0edfa04233865f802a12a3ad3c4f26d50866f7", + "testharness" + ], + "html/cross-origin-opener-policy/resources/call-functionCalledByOpenee.html": [ + "d0ff0b723e0f31c6ed635db95851769a598ce2a1", "support" ], "html/cross-origin-opener-policy/resources/common.js": [ @@ -457882,11 +458334,11 @@ "support" ], "html/dom/idlharness.worker-expected.txt": [ - "88f80ee37ace8c1b006bd7fd398cb365f3f24869", + "f03700f7dd9306e7cd01749ebf4b44ff35cf3a72", "support" ], "html/dom/idlharness.worker.js": [ - "b720d54f3d953633bd7abd1e73097a31a369e825", + "feddaf54c9235dbb766f79990f729c8e441cbbec", "testharness" ], "html/dom/interfaces.https-expected.txt": [ @@ -461981,10 +462433,6 @@ "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8", "support" ], - "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-extra-expected.txt": [ - "72f317b89191fad830d3d08f48551b8af0ed9aff", - "support" - ], "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-extra.html": [ "5ff10cbc10e8f39a80d25ad5db323e3746bf0bcc", "testharness" @@ -462009,10 +462457,6 @@ "b976d5b212652bf763b4a6039a70c26758c84ccf", "testharness" ], - "html/infrastructure/safe-passing-of-structured-data/structuredclone_0-expected.txt": [ - "2cd6f082563f537886db9dbb182516880e16a512", - "support" - ], "html/infrastructure/safe-passing-of-structured-data/structuredclone_0.html": [ "fbb48db03838addca28181629070d57b1ea81f24", "testharness" @@ -505798,7 +506242,7 @@ "support" ], "resources/chromium/nfc-mock.js": [ - "5cac21bc076f4166ef1b3d14860d69c9f14aedbe", + "be86dedd4d8877dcb01ade039c95cbb8f7acc99f", "support" ], "resources/chromium/sensor.mojom.js": [ @@ -508345,6 +508789,10 @@ "417aa4ebec8380ec778bbe42f3ee8fb45649292f", "testharness" ], + "service-workers/service-worker/opaque-script.https.html": [ + "7d2121855dfa17649b81fd96aad03d93e85be22b", + "testharness" + ], "service-workers/service-worker/performance-timeline.https.html": [ "1fe19da53be6c460cae5f069794bbdee3f4a0da8", "testharness" @@ -509321,6 +509769,22 @@ "f31ac9b5c4ce372b182d53dd6690f1c3b498ecd1", "support" ], + "service-workers/service-worker/resources/opaque-script-frame.html": [ + "a57aacec7c6f32d9c321b99057032947c877e4b8", + "support" + ], + "service-workers/service-worker/resources/opaque-script-large.js": [ + "7e1c598efc5cf15f23789fefa0993e1d07ac214e", + "support" + ], + "service-workers/service-worker/resources/opaque-script-small.js": [ + "8b890985752fd01d47d8cb553d6dad945dbc00bb", + "support" + ], + "service-workers/service-worker/resources/opaque-script-sw.js": [ + "4d882c617d8dc6b790a51b82f3edeb65e7f18d22", + "support" + ], "service-workers/service-worker/resources/other.html": [ "b9f3504387722c4583a0904cb7b7f7a4f9706b71", "support" @@ -511921,50 +512385,18 @@ "ed04b3c0a17fcd9902054e0d844171b9baa41c18", "testharness" ], - "streams/writable-streams/brand-checks.any-expected.txt": [ - "bd75d6787a2ffbb88a6cfb3ea018def0366ed7ea", - "support" - ], "streams/writable-streams/brand-checks.any.js": [ "17179e7936eda23a284e447bf9b877270016931d", "testharness" ], - "streams/writable-streams/brand-checks.any.serviceworker-expected.txt": [ - "bd75d6787a2ffbb88a6cfb3ea018def0366ed7ea", - "support" - ], - "streams/writable-streams/brand-checks.any.sharedworker-expected.txt": [ - "bd75d6787a2ffbb88a6cfb3ea018def0366ed7ea", - "support" - ], - "streams/writable-streams/brand-checks.any.worker-expected.txt": [ - "bd75d6787a2ffbb88a6cfb3ea018def0366ed7ea", - "support" - ], "streams/writable-streams/byte-length-queuing-strategy.any.js": [ "5edd41cc31d8d76d2cc91d7c5b2e850dc9ee43f1", "testharness" ], - "streams/writable-streams/close.any-expected.txt": [ - "1ec4c49d5b6830bb7aa0f3bd7bc9fa723fdd7e9f", - "support" - ], "streams/writable-streams/close.any.js": [ "0762b83e5d1476c5e70d89957e784fc9d2f80cd0", "testharness" ], - "streams/writable-streams/close.any.serviceworker-expected.txt": [ - "1ec4c49d5b6830bb7aa0f3bd7bc9fa723fdd7e9f", - "support" - ], - "streams/writable-streams/close.any.sharedworker-expected.txt": [ - "1ec4c49d5b6830bb7aa0f3bd7bc9fa723fdd7e9f", - "support" - ], - "streams/writable-streams/close.any.worker-expected.txt": [ - "1ec4c49d5b6830bb7aa0f3bd7bc9fa723fdd7e9f", - "support" - ], "streams/writable-streams/constructor.any-expected.txt": [ "408fdc9f5c05ed1571438cc6197bc5e34a7a7992", "support" @@ -512002,7 +512434,7 @@ "testharness" ], "streams/writable-streams/properties.any-expected.txt": [ - "8a7f4cbe4b06d1fe3a541e9443b59cb08bce36eb", + "0f5ae376b2a4a05a01690bbe9b0d462e2b8d6374", "support" ], "streams/writable-streams/properties.any.js": [ @@ -512010,15 +512442,15 @@ "testharness" ], "streams/writable-streams/properties.any.serviceworker-expected.txt": [ - "8a7f4cbe4b06d1fe3a541e9443b59cb08bce36eb", + "0f5ae376b2a4a05a01690bbe9b0d462e2b8d6374", "support" ], "streams/writable-streams/properties.any.sharedworker-expected.txt": [ - "8a7f4cbe4b06d1fe3a541e9443b59cb08bce36eb", + "0f5ae376b2a4a05a01690bbe9b0d462e2b8d6374", "support" ], "streams/writable-streams/properties.any.worker-expected.txt": [ - "8a7f4cbe4b06d1fe3a541e9443b59cb08bce36eb", + "0f5ae376b2a4a05a01690bbe9b0d462e2b8d6374", "support" ], "streams/writable-streams/reentrant-strategy.any.js": [ @@ -520226,7 +520658,7 @@ "testharness" ], "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [ - "8608bcc24fed0fb050925bd52830db38082ae3b1", + "a78b3dbf0fd7a9532a45957970076cce16819231", "testharness" ], "trusted-types/TrustedTypePolicyFactory-createPolicy-cspTests-noNamesGiven.tentative.html": [ @@ -520398,7 +520830,7 @@ "support" ], "trusted-types/support/helper.sub.js": [ - "d13ad567a726f39299a7e7f58aeffec4ba90a908", + "20f56c3cbc7af094a7fd8db5d73b546804f8e9d0", "support" ], "trusted-types/support/navigation-report-only-support.html": [ @@ -525818,7 +526250,7 @@ "testharness" ], "web-nfc/NDEFRecord_constructor.https.html": [ - "2da7ca91078aa5ec8232f5347fb276618dad3c3c", + "0e0f1a771394570747117980c824c133ca3b060d", "testharness" ], "web-nfc/NDEFWriter-document-hidden-manual.https-expected.txt": [ @@ -525830,11 +526262,11 @@ "manual" ], "web-nfc/NDEFWriter_push.https-expected.txt": [ - "7c6b03b096f78c198b0d95dd4f6b87bc62ed011e", + "2b865d488d162b408d186028f09fabfbc2aabb32", "support" ], "web-nfc/NDEFWriter_push.https.html": [ - "cb6b3941410035c5c5736e13d59fbbfb85f0d4cc", + "bf7c1f86ad0b4fdf066b4bc4584f9409d840d823", "testharness" ], "web-nfc/OWNERS": [
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests-expected.txt b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests-expected.txt index 4d33a0e..330d8936 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests-expected.txt +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests-expected.txt
@@ -18,14 +18,14 @@ PASS 0017 - Keep order if comma-separated. PASS 0018 - Ignore keys after semicolon. PASS 0019 - Ignore attributes after semicolon. -FAIL 0020 - Ignore cookies without key and value. assert_equals: expected "a=b; c=d" but got "a=b; ; c=d" +PASS 0020 - Ignore cookies without key and value. FAIL 0021 - Ignore cookie without key in all 'Set-Cookie'. assert_equals: expected "a=b; c=d" but got "a=b; x; c=d" PASS 0022 - Set cookie without value in all 'Set-Cookie'. -PASS 0023 - Ignore cookies without '=' in all 'Set-Cookie'. -PASS 0024 - Ignore malformed cookies in all 'Set-Cookie'. -PASS 0025 - Ignore cookies with ';' in all 'Set-Cookie'. -PASS 0026 - Ignore malformed cookies in all 'Set-Cookie' v2. +FAIL 0023 - Ignore cookies without '=' in all 'Set-Cookie'. assert_equals: expected "" but got "foo" +FAIL 0024 - Ignore malformed cookies in all 'Set-Cookie'. assert_equals: expected "" but got "foo" +FAIL 0025 - Ignore cookies with ';' in all 'Set-Cookie'. assert_equals: expected "" but got "foo" +FAIL 0026 - Ignore malformed cookies in all 'Set-Cookie' v2. assert_equals: expected "" but got "foo" FAIL 0027 - Ignore malformed cookies in all 'Set-Cookie' v3. assert_equals: expected "" but got "bar" -FAIL 0028 - [INVALID EXPECTATION] Ignore malformed cookies in all 'Set-Cookie' v4. assert_equals: expected "Set-Cookie: foo\nSet-Cookie:" but got "" +FAIL 0028 - Ignore malformed cookies in all 'Set-Cookie' v4. assert_equals: expected "" but got "foo" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html index c8b7ea4..d80527f9 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html
@@ -49,8 +49,7 @@ {file: "0025", name: "Ignore cookies with ';' in all 'Set-Cookie'."}, {file: "0026", name: "Ignore malformed cookies in all 'Set-Cookie' v2."}, {file: "0027", name: "Ignore malformed cookies in all 'Set-Cookie' v3."}, - // TODO(fhorschig): Ask about 0028's expectations ... should be empty? - {file: "0028", name: "[INVALID EXPECTATION] Ignore malformed cookies in all 'Set-Cookie' v4."}, + {file: "0028", name: "Ignore malformed cookies in all 'Set-Cookie' v4."}, ]; for (const i in TEST_CASES) {
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/cookie-http-state-template.js b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/cookie-http-state-template.js index 62459f059..b2af226e 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/cookie-http-state-template.js +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/cookie-http-state-template.js
@@ -39,7 +39,7 @@ name = name || ""; expiry_date = expiry_date || "Thu, 01 Jan 1970 00:00:00 UTC"; path = path || getLocalResourcesPath(); - document.cookie = name + "=; expires=" + expiry_date + "; path=" + path + ";"; + document.cookie = name + "=value; expires=" + expiry_date + "; path=" + path + ";"; } /* Captures a snapshot of cookies with |parse| and allows to diff it with a
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0026-test b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0026-test index 609c668..5ac72745 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0026-test +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0026-test
@@ -1,2 +1,2 @@ Set-Cookie: foo -Set-Cookie: +Set-Cookie:
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-expected b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-expected index 609c668..e69de29 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-expected +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-expected
@@ -1,2 +0,0 @@ -Set-Cookie: foo -Set-Cookie:
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-test b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-test index 609c668..fea1e1a 100644 --- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-test +++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/test-files/0028-test
@@ -1,2 +1,2 @@ Set-Cookie: foo -Set-Cookie: +Set-Cookie:
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-composition.html b/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-composition.html new file mode 100644 index 0000000..c3e4818 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-color/animation/color-composition.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>color composition</title> +<link rel="help" href="https://drafts.csswg.org/css-color/#the-color-property"> +<meta name="assert" content="color supports animation by computed value type"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.target { + width: 40px; + height: 40px; + background-color: black; +} +.expected { + background-color: green; +} +</style> + +<body> +<script> +test_composition({ + property: 'color', + underlying: 'rgb(50, 50, 50)', + addFrom: 'rgb(10, 10, 10)', + replaceTo: 'rgb(30, 30, 30)', +}, [ + {at: 0, expect: 'rgb(60, 60, 60)'}, + {at: 0.2, expect: 'rgb(54, 54, 54)'}, + {at: 1, expect: 'rgb(30, 30, 30)'}, + {at: 1.2, expect: 'rgb(24, 24, 24)'}, + {at: 1.5, expect: 'rgb(15, 15, 15)'}, +]); + +test_composition({ + property: 'color', + underlying: 'rgb(60, 60, 60)', + addFrom: 'rgb(0, 0, 0)', + replaceTo: 'rgb(50, 50, 50)', +}, [ + {at: 0, expect: 'rgb(60, 60, 60)'}, + {at: 0.5, expect: 'rgb(55, 55, 55)'}, + {at: 1, expect: 'rgb(50, 50, 50)'}, + {at: 1.2, expect: 'rgb(48, 48, 48)'}, + {at: 1.5, expect: 'rgb(45, 45, 45)'}, +]); +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/animation/flex-basis-composition.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/animation/flex-basis-composition.html new file mode 100644 index 0000000..122761e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/animation/flex-basis-composition.html
@@ -0,0 +1,78 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>flex-basis composition</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-basis-property"> +<meta name="assert" content="flex-basis supports animation by computed value type"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<body> +<script> +test_composition({ + property: 'flex-basis', + underlying: '50px', + addFrom: '100px', + addTo: '200px', +}, [ + {at: -0.3, expect: '120px'}, + {at: 0, expect: '150px'}, + {at: 0.5, expect: '200px'}, + {at: 1, expect: '250px'}, + {at: 1.5, expect: '300px'}, +]); + +test_composition({ + property: 'flex-basis', + underlying: '100px', + addFrom: '10px', + addTo: '2px', +}, [ + {at: -0.5, expect: '114px'}, + {at: 0, expect: '110px'}, + {at: 0.5, expect: '106px'}, + {at: 1, expect: '102px'}, + {at: 1.5, expect: '98px'}, // Value clamping should happen after composition. +]); + +test_composition({ + property: 'flex-basis', + underlying: '10%', + addFrom: '100px', + addTo: '20%', +}, [ + {at: -0.3, expect: 'calc(130px + 4%)'}, + {at: 0, expect: 'calc(100px + 10%)'}, + {at: 0.5, expect: 'calc(50px + 20%)'}, + {at: 1, expect: '30%'}, + {at: 1.5, expect: 'calc(-50px + 40%)'}, +]); + +test_composition({ + property: 'flex-basis', + underlying: '50px', + addFrom: '100px', + replaceTo: '200px', +}, [ + {at: -0.3, expect: '135px'}, + {at: 0, expect: '150px'}, + {at: 0.5, expect: '175px'}, + {at: 1, expect: '200px'}, + {at: 1.5, expect: '225px'}, +]); + +test_composition({ + property: 'flex-basis', + underlying: '100px', + addFrom: '100px', + addTo: 'auto', +}, [ + {at: -0.3, expect: '200px'}, + {at: 0, expect: '200px'}, + {at: 0.5, expect: 'auto'}, + {at: 1, expect: 'auto'}, + {at: 1.5, expect: 'auto'}, +]); +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-expected.txt deleted file mode 100644 index 29efcb5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-expected.txt +++ /dev/null
@@ -1,189 +0,0 @@ -This is a testharness.js-based test. -FAIL .grid 1 assert_equals: -<div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 260 but got 40 -FAIL .grid 2 assert_equals: -<div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 55 but got 0 -FAIL .grid 3 assert_equals: -<div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 73 but got 0 -PASS .grid 4 -FAIL .grid 5 assert_equals: -<div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 130 but got 40 -FAIL .grid 6 assert_equals: -<div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 30 but got 0 -FAIL .grid 7 assert_equals: -<div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 45 but got 0 -PASS .grid 8 -FAIL .grid 9 assert_equals: -<div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 87 but got 40 -FAIL .grid 10 assert_equals: -<div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 18 but got 0 -FAIL .grid 11 assert_equals: -<div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 28 but got 0 -PASS .grid 12 -FAIL .grid 13 assert_equals: -<div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 260 but got 40 -FAIL .grid 14 assert_equals: -<div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 55 but got 0 -FAIL .grid 15 assert_equals: -<div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 73 but got 0 -PASS .grid 16 -FAIL .grid 17 assert_equals: -<div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 130 but got 40 -FAIL .grid 18 assert_equals: -<div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 30 but got 0 -FAIL .grid 19 assert_equals: -<div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 45 but got 0 -PASS .grid 20 -FAIL .grid 21 assert_equals: -<div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 87 but got 40 -FAIL .grid 22 assert_equals: -<div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 18 but got 0 -FAIL .grid 23 assert_equals: -<div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - </div> -offsetTop expected 28 but got 0 -PASS .grid 24 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr-expected.txt deleted file mode 100644 index 82b19bbb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr-expected.txt +++ /dev/null
@@ -1,207 +0,0 @@ -This is a testharness.js-based test. -FAIL .grid 1 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 360 but got 40 -FAIL .grid 2 assert_equals: -<div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 80 but got 0 -FAIL .grid 3 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 107 but got 0 -PASS .grid 4 -FAIL .grid 5 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 180 but got 40 -FAIL .grid 6 assert_equals: -<div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 47 but got 0 -FAIL .grid 7 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 70 but got 0 -FAIL .grid 8 assert_equals: -<div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - </div> -width expected 133 but got 134 -FAIL .grid 9 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 120 but got 40 -FAIL .grid 10 assert_equals: -<div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 30 but got 0 -FAIL .grid 11 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 48 but got 0 -PASS .grid 12 -FAIL .grid 13 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 360 but got 40 -FAIL .grid 14 assert_equals: -<div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 80 but got 0 -FAIL .grid 15 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 107 but got 0 -PASS .grid 16 -FAIL .grid 17 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 180 but got 40 -FAIL .grid 18 assert_equals: -<div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 47 but got 0 -FAIL .grid 19 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 70 but got 0 -FAIL .grid 20 assert_equals: -<div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - </div> -width expected 133 but got 134 -FAIL .grid 21 assert_equals: -<div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 120 but got 40 -FAIL .grid 22 assert_equals: -<div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 30 but got 0 -FAIL .grid 23 assert_equals: -<div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 48 but got 0 -PASS .grid 24 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html deleted file mode 100644 index 8217f4d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html +++ /dev/null
@@ -1,358 +0,0 @@ -<meta charset="utf-8"> -<title>CSS Grid Layout Test: aligned content distribution for vertical lr</title> -<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> -<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values"> -<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values for the vertical-lr writing mode."> -<meta name="flags" content="ahem"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> -<link rel="stylesheet" href="/css/support/grid.css"> - -<style> - -.grid { - grid-auto-columns: 20px; - grid-auto-rows: 40px; - position: relative; - width: 400px; - height: 300px; -} - -.stretchedGrid { - grid-auto-rows: auto; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -</style> - -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/check-layout-th.js"></script> - -<body onload="checkLayout('.grid')"> - -<p>This test checks that the align-content property is applied correctly when using content-distribution values in vertical-lr writing mode.</p> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="100" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="300" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="300" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - </div> -</div> - -<!-- RTL direction. --> -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="100" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="100" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="300" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="300" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - </div> -</div> -</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl-expected.txt deleted file mode 100644 index 732395093..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl-expected.txt +++ /dev/null
@@ -1,207 +0,0 @@ -This is a testharness.js-based test. -FAIL .grid 1 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 0 but got 320 -FAIL .grid 2 assert_equals: -<div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 280 but got 360 -FAIL .grid 3 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 253 but got 360 -PASS .grid 4 -FAIL .grid 5 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 180 but got 320 -FAIL .grid 6 assert_equals: -<div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 313 but got 360 -FAIL .grid 7 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 290 but got 360 -FAIL .grid 8 assert_equals: -<div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - </div> -width expected 133 but got 134 -FAIL .grid 9 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 240 but got 320 -FAIL .grid 10 assert_equals: -<div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 330 but got 360 -FAIL .grid 11 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 312 but got 360 -PASS .grid 12 -FAIL .grid 13 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 0 but got 320 -FAIL .grid 14 assert_equals: -<div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 280 but got 360 -FAIL .grid 15 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 253 but got 360 -PASS .grid 16 -FAIL .grid 17 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 180 but got 320 -FAIL .grid 18 assert_equals: -<div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 313 but got 360 -FAIL .grid 19 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 290 but got 360 -FAIL .grid 20 assert_equals: -<div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - </div> -width expected 133 but got 134 -FAIL .grid 21 assert_equals: -<div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 240 but got 320 -FAIL .grid 22 assert_equals: -<div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 330 but got 360 -FAIL .grid 23 assert_equals: -<div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -offsetLeft expected 312 but got 360 -PASS .grid 24 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html deleted file mode 100644 index 096e3fd6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html +++ /dev/null
@@ -1,358 +0,0 @@ -<meta charset="utf-8"> -<title>CSS Grid Layout Test: aligned content distribution for vertical rl</title> -<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> -<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values"> -<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values for the vertical-rl writing mode."> -<meta name="flags" content="ahem"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> -<link rel="stylesheet" href="/css/support/grid.css"> - -<style> - -.grid { - grid-auto-columns: 20px; - grid-auto-rows: 40px; - position: relative; - width: 400px; - height: 300px; -} - -.stretchedGrid { - grid-auto-rows: auto; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -</style> - -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/check-layout-th.js"></script> - -<body onload="checkLayout('.grid')"> - -<p>This test checks that the align-content property is applied correctly when using content-distribution values for vertical-rl mode.</p> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="300" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="300" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="100" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div> - </div> -</div> - -<!-- RTL direction. --> -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="300" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="firstRowSecondColumn" data-offset-x="300" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowFirstColumn" data-offset-x="100" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="thirdRowSecondColumn" data-offset-x="100" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div> - <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div> - </div> -</div> -</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html deleted file mode 100644 index 7b66ddb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html +++ /dev/null
@@ -1,358 +0,0 @@ -<meta charset="utf-8"> -<title>CSS Grid Layout Test: aligned content distribution</title> -<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> -<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values"> -<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values."> -<meta name="flags" content="ahem"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> -<link rel="stylesheet" href="/css/support/grid.css"> - -<style> - -.grid { - grid-auto-columns: 20px; - grid-auto-rows: 40px; - position: relative; - width: 200px; - height: 300px; -} - -.stretchedGrid { - grid-auto-rows: auto; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -</style> - -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/check-layout-th.js"></script> - -<body onload="checkLayout('.grid')"> - -<p>This test checks that the align-content property is applied correctly when using content-distribution values.</p> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div> - <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div> - <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div> - <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div> - <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div> - <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div> - <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div> - </div> -</div> - -<!-- RTL direction. --> -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-between'</p> - <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-around'</p> - <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'space-evenly'</p> - <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'stretch'</p> - <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300"> - <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div> - <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div> - <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div> - <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div> - <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div> - <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div> - <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div> - <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div> - </div> -</div> -</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-align.html b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-align.html new file mode 100644 index 0000000..3be68fe --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-align.html
@@ -0,0 +1,121 @@ +<!DOCTYPE html> +<title> + Updating the snap alignment of a snap container's content should make the snap + container resnap accordingly. +</title> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap/#re-snap" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + position: absolute; + margin: 0; +} + +#scroller { + height: 200px; + width: 200px; + overflow: hidden; + scroll-snap-type: both mandatory; +} + +#initial-target { + width: 300px; + height: 300px; + top: 100px; + left: 100px; + background-color: green; + scroll-snap-align: start; +} + +#other-target { + width: 300px; + height: 300px; + top: 300px; + left: 300px; + background-color: red; + scroll-snap-align: start; +} + +.area { + width: 2000px; + height: 2000px; +} + +.snap-area { + scroll-snap-align: start !important; +} +</style> + +<div id="scroller"> + <div class="area"></div> + <div id="initial-target"></div> + <div id="other-target"></div> +</div> + +<script> +const initial_target = document.getElementById("initial-target"); +const other_target = document.getElementById("other-target"); +const scroller = document.getElementById("scroller"); + +function cleanup() { + initial_target.style.setProperty("scroll-snap-align", "start"); + other_target.style.setProperty("scroll-snap-align", "start"); + initial_target.removeAttribute("class"); +} + +test(t => { + t.add_cleanup(cleanup); + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 100); + assert_equals(scroller.scrollLeft, 100); + + initial_target.style.setProperty("scroll-snap-align", "end"); + // target.top + target.height - scroller.height + assert_equals(scroller.scrollTop, 200); + assert_equals(scroller.scrollLeft, 200); +}, "Changing the current target's snap alignment should make the scroller" ++ " resnap to it even if another snap position is closer to the current offset"); + +test(t => { + t.add_cleanup(cleanup); + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 100); + assert_equals(scroller.scrollLeft, 100); + + initial_target.style.setProperty("scroll-snap-align", "none"); + assert_equals(scroller.scrollTop, 300); + assert_equals(scroller.scrollLeft, 300); +}, "Removing the current target's snap alignment should make the scroller" ++ " resnap to a new snap area."); + +test(t => { + t.add_cleanup(cleanup); + initial_target.style.setProperty("scroll-snap-align", "none"); + other_target.style.setProperty("scroll-snap-align", "none"); + + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 0); + assert_equals(scroller.scrollLeft, 0); + + initial_target.style.setProperty("scroll-snap-align", "start"); + assert_equals(scroller.scrollTop, 100); + assert_equals(scroller.scrollLeft, 100); +}, "Changing an element snap alignment from none to start should make the" ++ "scroller resnap."); + +test(t => { + t.add_cleanup(cleanup); + initial_target.style.setProperty("scroll-snap-align", "none"); + other_target.style.setProperty("scroll-snap-align", "none"); + + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 0); + assert_equals(scroller.scrollLeft, 0); + + initial_target.classList.add("snap-area"); + assert_equals(scroller.scrollTop, 100); + assert_equals(scroller.scrollLeft, 100); +}, "Changing an element snap alignment from none to start by adding a class" ++ " should make the scroller resnap."); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-type.html b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-type.html new file mode 100644 index 0000000..70774b3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-type.html
@@ -0,0 +1,96 @@ +<!DOCTYPE html> +<title> + Updating the scroll-snap-type of a snap container should make it resnap accordingly. +</title> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap/#re-snap" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + position: absolute; + margin: 0; +} + +#scroller { + height: 500px; + width: 500px; + overflow: hidden; + scroll-snap-type: none; +} + +#y-target { + width: 300px; + height: 300px; + top: 100px; + left: 0; + background-color: green; + scroll-snap-align: start none; +} + +#x-target { + width: 300px; + height: 300px; + top: 0; + left: 100px; + background-color: red; + scroll-snap-align: none start; +} + +.area { + width: 2000px; + height: 2000px; +} +</style> + +<div id="scroller"> + <div class="area"></div> + <div id="x-target"></div> + <div id="y-target"></div> +</div> + +<script> +const x_target = document.getElementById("x_target"); +const y_target = document.getElementById("y_target"); +const scroller = document.getElementById("scroller"); + +function cleanup() { + scroller.style.setProperty("scroll-snap-type", "none"); +} + +test(t => { + t.add_cleanup(cleanup); + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 0); + assert_equals(scroller.scrollLeft, 0); + + scroller.style.setProperty("scroll-snap-type", "y mandatory"); + assert_equals(scroller.scrollTop, 100); + assert_equals(scroller.scrollLeft, 0); +}, "Changing the scroller's snap type to y should make it resnap on the y-axis."); + +test(t => { + t.add_cleanup(cleanup); + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 0); + assert_equals(scroller.scrollLeft, 0); + + scroller.style.setProperty("scroll-snap-type", "x mandatory"); + assert_equals(scroller.scrollLeft, 100); + assert_equals(scroller.scrollTop, 0); +}, "Changing the scroller's snap type to x should make it resnap on the x-axis."); + + +test(t => { + t.add_cleanup(cleanup); + scroller.scrollTo(0,0); + assert_equals(scroller.scrollTop, 0); + assert_equals(scroller.scrollLeft, 0); + + scroller.style.setProperty("scroll-snap-type", "x mandatory"); + assert_equals(scroller.scrollLeft, 100); + assert_equals(scroller.scrollTop, 0); + + scroller.style.setProperty("scroll-snap-type", "y mandatory"); + assert_equals(scroller.scrollTop, 100); +}, "Changing the scroller's snap type axis should make it resnap."); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/resources/record-header.py b/third_party/blink/web_tests/external/wpt/fetch/metadata/resources/record-header.py index 3bfb1fcd..364c800a 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/metadata/resources/record-header.py +++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/resources/record-header.py
@@ -99,8 +99,13 @@ file.close() return video - ## Return a valid style content and Content-Type ## - if key.startswith("style") or key.startswith("embed") or key.startswith("object"): + ## Return valid style content and Content-Type ## + if key.startswith("style"): + response.headers.set("Content-Type", "text/css") + return "div { }" + + ## Return a valid embed/object content and Content-Type ## + if key.startswith("embed") or key.startswith("object"): response.headers.set("Content-Type", "text/html") return "<html>EMBED!</html>"
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https-expected.txt index 6e7f600078..d9c62f2 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https-expected.txt
@@ -7,9 +7,9 @@ FAIL Popup navigating to same-site with coop/no coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop/no-coep" FAIL Popup navigating to same-origin with no coop/no coep assert_equals: expected "" but got "Popup-navigating-to-same-origin-with-no-coop/no-coep" FAIL Popup navigating to same-site with no coop/no coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-no-coop/no-coep" -PASS Popup navigating to same-origin with coop unsafe-inherit/coep -FAIL Popup navigating to same-site with coop unsafe-inherit/coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-inherit/coep" -FAIL Popup navigating to same-origin with coop unsafe-inherit/no coep assert_equals: expected "" but got "Popup-navigating-to-same-origin-with-coop-unsafe-inherit/no-coep" -FAIL Popup navigating to same-site with coop unsafe-inherit/no coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-inherit/no-coep" +PASS Popup navigating to same-origin with coop unsafe-none/coep +FAIL Popup navigating to same-site with coop unsafe-none/coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-none/coep" +FAIL Popup navigating to same-origin with coop unsafe-none/no coep assert_equals: expected "" but got "Popup-navigating-to-same-origin-with-coop-unsafe-none/no-coep" +FAIL Popup navigating to same-site with coop unsafe-none/no coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-none/no-coep" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html index 21320a61..faa2793e 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html
@@ -32,14 +32,14 @@ "opener": false }, { - "title": "coop unsafe-inherit/coep", - "coop": "unsafe-inherit", + "title": "coop unsafe-none/coep", + "coop": "unsafe-none", "coep": "require-corp", "opener": true }, { - "title": "coop unsafe-inherit/no coep", - "coop": "unsafe-inherit", + "title": "coop unsafe-none/no coep", + "coop": "unsafe-none", "coep": "", "opener": false } @@ -53,9 +53,9 @@ async_test(t => { // For each test we open a COOP: same-origin/COEP: require-corp document in a popup and then - // navigate that to either a same-origin or same-site document whose COOP and COEP are set as - // per the top-most array. We then verify that this document has the correct opener for its - // specific setup. + // navigate that to either a same-origin (site=="same-origin") or same-site (site=="same-site") + // document whose COOP and COEP are set as per the top-most array. We then verify that this + // document has the correct opener for its specific setup. url_test(t, `${SAME_ORIGIN.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=same-origin&coep=require-corp&navigate=${encodeURIComponent(navigateURL)}`, channel, opener); }, title); });
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https-expected.txt index faa2c84f..e9b52b6 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https-expected.txt
@@ -3,7 +3,7 @@ FAIL Redirect from coop/coep to no coop/coep assert_equals: expected "" but got "Redirect-from-coop/coep-to-no-coop/coep" FAIL Redirect from no coop/no coep to coop/coep assert_equals: expected "" but got "Redirect-from-no-coop/no-coep-to-coop/coep" FAIL Redirect from coop/no coep to coop/coep assert_equals: expected "" but got "Redirect-from-coop/no-coep-to-coop/coep" -PASS Redirect from coop unsafe-inherit/coep to coop/coep -PASS Redirect from coop unsafe-inherit/coep to coop unsafe-inherit/coep +PASS Redirect from coop unsafe-none/coep to coop/coep +PASS Redirect from coop unsafe-none/coep to coop unsafe-inherit/coep Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html index 73f07dd..2727013 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html
@@ -1,5 +1,6 @@ <!doctype html> <title>Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy: redirects</title> +<meta content=timeout value=long> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src="/common/get-host-info.sub.js"></script> @@ -41,18 +42,18 @@ "opener": false }, { - "title": "coop unsafe-inherit/coep to coop/coep", - "redirectCOOP": "unsafe-inherit", + "title": "coop unsafe-none/coep to coop/coep", + "redirectCOOP": "unsafe-none", "redirectCOEP": "require-corp", "coop": "same-origin", "coep": "require-corp", "opener": true }, { - "title": "coop unsafe-inherit/coep to coop unsafe-inherit/coep", - "redirectCOOP": "unsafe-inherit", + "title": "coop unsafe-none/coep to coop unsafe-inherit/coep", + "redirectCOOP": "unsafe-none", "redirectCOEP": "require-corp", - "coop": "unsafe-inherit", + "coop": "unsafe-none", "coep": "require-corp", "opener": true }
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt index 1bafd5c6..047797b 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt
@@ -1,12 +1,12 @@ This is a testharness.js-based test. PASS Same-origin popup with coop/coep -FAIL Same-site popup with coop/coep assert_equals: expected "" but got "same-site-popup-with-coop/coep" -PASS Same-origin popup with coop unsafe-inherit/coep -FAIL Same-site popup with coop unsafe-inherit/coep assert_equals: expected "" but got "same-site-popup-with-coop-unsafe-inherit/coep" -FAIL Same-origin popup with coop unsafe-inherit without coep assert_equals: expected "" but got "popup-with-coop-unsafe-inherit-without-coep" -FAIL Same-site popup with coop unsafe-inherit without coep assert_equals: expected "" but got "same-site-popup-with-coop-unsafe-inherit-without-coep" +FAIL historical: "same-site" popup with coop/coep assert_equals: expected "" but got "same-site-popup-with-coop/coep" +PASS Same-origin popup with coop unsafe-none/coep +FAIL historical: "same-site" popup with coop unsafe-none/coep assert_equals: expected "" but got "same-site-popup-with-coop-unsafe-none/coep" +FAIL Same-origin popup with coop unsafe-none without coep assert_equals: expected "" but got "popup-with-coop-unsafe-none-without-coep" +FAIL historical: "same-site" popup with coop unsafe-none without coep assert_equals: expected "" but got "same-site-popup-with-coop-unsafe-none-without-coep" FAIL Same-origin popup without coep assert_equals: expected "" but got "popup-without-coep" -FAIL Same-site popup without coep assert_equals: expected "" but got "same-site-popup-without-coep" +FAIL historical: "same-site" popup without coep assert_equals: expected "" but got "same-site-popup-without-coep" FAIL Bonus: window.crossOriginIsolated assert_true: expected true got undefined Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https.html index 64994cdf..de1dd56d 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https.html
@@ -1,5 +1,6 @@ <!doctype html> <title>Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy</title> +<meta content=timeout value=long> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src="/common/get-host-info.sub.js"></script> @@ -13,14 +14,14 @@ "opener": true }, { - "title": "popup with coop unsafe-inherit/coep", - "coop": "unsafe-inherit", + "title": "popup with coop unsafe-none/coep", + "coop": "unsafe-none", "coep": "require-corp", "opener": true }, { - "title": "popup with coop unsafe-inherit without coep", - "coop": "unsafe-inherit", + "title": "popup with coop unsafe-none without coep", + "coop": "unsafe-none", "coep": "", "opener": false }, @@ -35,10 +36,10 @@ coop_coep_test(t, SAME_ORIGIN, variant.coop, variant.coep, variant.title.replace(/ /g,"-"), variant.opener); }, `Same-origin ${variant.title}`); - // This seems useful to test, CROSS_SITE is probably too redundant though. + // "same-site" is a historical value, equivalent to "unsafe-none" async_test(t => { coop_coep_test(t, SAME_SITE, variant.coop, variant.coep, `same-site-${variant.title.replace(/ /g,"-")}`, false); - }, `Same-site ${variant.title}`); + }, `historical: "same-site" ${variant.title}`); }); test(() => {
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html index 9a92dd9..3c6019a 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html
@@ -1,7 +1,7 @@ <!doctype html> <title>Cross-Origin-Opener-Policy: a navigated popup</title> <!-- In particular this is different from coep-navigate-popup.https.html as this document initiates - the navigation (and uses unsafe-allow-outgoing and no COEP as without that it cannot be + the navigation (and uses same-origin-allow-popups and no COEP as without that it cannot be observed). COOP should work identically, but implementations might have used the wrong authority. --> <script src=/resources/testharness.js></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers index a19f4400..d83ed86 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers
@@ -1 +1 @@ -Cross-Origin-Opener-Policy: same-origin unsafe-allow-outgoing +Cross-Origin-Opener-Policy: same-origin-allow-popups
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html index e471b1e..fc16c18 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html
@@ -15,8 +15,10 @@ const popup = window.open("resources/coop-coep.py?coop=same-origin&coep=&channel=${channel.name}"); <\/script>`; document.body.append(frame); - t.step_timeout(() => { - t.done() - }, 500); + window.onload = t.step_func(() => { + t.step_timeout(() => { + t.done() + }, 1500); + }); }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https-expected.txt new file mode 100644 index 0000000..6d6f5a8a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +PASS Popup navigating to same-origin with coop unsafe-inherit/coep +FAIL Popup navigating to same-site with coop unsafe-inherit/coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-inherit/coep" +FAIL Popup navigating to same-origin with coop unsafe-inherit/no coep assert_equals: expected "" but got "Popup-navigating-to-same-origin-with-coop-unsafe-inherit/no-coep" +FAIL Popup navigating to same-site with coop unsafe-inherit/no coep assert_equals: expected "" but got "Popup-navigating-to-same-site-with-coop-unsafe-inherit/no-coep" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html new file mode 100644 index 0000000..73ef1ea --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html
@@ -0,0 +1,39 @@ +<!doctype html> +<title>Historical: Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy: a navigating popup</title> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> +<script> +[ + { + "title": "coop unsafe-inherit/coep", + "coop": "unsafe-inherit", // historical value, equivalent to "unsafe-none" + "coep": "require-corp", + "opener": true + }, + { + "title": "coop unsafe-inherit/no coep", + "coop": "unsafe-inherit", // historical value, equivalent to "unsafe-none" + "coep": "", + "opener": false + } +].forEach(variant => { + ["same-origin", "same-site"].forEach(site => { + const title = `Popup navigating to ${site} with ${variant.title}`; + const channel = title.replace(/ /g,"-"); + const navigateHost = site === "same-origin" ? SAME_ORIGIN : SAME_SITE; + const navigateURL = `${navigateHost.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=${variant.coop}&coep=${variant.coep}&channel=${channel}`; + const opener = site === "same-origin" ? variant.opener : false; + + async_test(t => { + // For each test we open a COOP: same-origin/COEP: require-corp document in a popup and then + // navigate that to either a document with same origin (site=="same-origin") or + // not-same-origin (site=="same-site") whose COOP and COEP are set as per the top-most array. + // We then verify that this document has the correct opener for its specific setup. + url_test(t, `${SAME_ORIGIN.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=same-origin&coep=require-corp&navigate=${encodeURIComponent(navigateURL)}`, channel, opener); + }, title); + }); +}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..d32242d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_CROSS_ORIGIN_same-origin" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html new file mode 100644 index 0000000..a8b6d54 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html.headers similarity index 100% rename from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers rename to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https-expected.txt new file mode 100644 index 0000000..cba1078 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "" +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_SAME_ORIGIN_same-origin" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html new file mode 100644 index 0000000..aaaae2d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https-expected.txt new file mode 100644 index 0000000..5800c692 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_SAME_SITE_same-origin" +FAIL same-origin unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin unsafe-allow-outgoing_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html new file mode 100644 index 0000000..fd58b06 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..8378675 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_CROSS_ORIGIN_same-origin" +FAIL same-site unsafe-allow-outgoing document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html new file mode 100644 index 0000000..7330ff75 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers similarity index 100% rename from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers rename to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https-expected.txt new file mode 100644 index 0000000..9f6a422 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "" +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_SAME_ORIGIN_same-origin" +FAIL same-site unsafe-allow-outgoing document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html new file mode 100644 index 0000000..01cc6719 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https-expected.txt new file mode 100644 index 0000000..9074e94 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_SAME_SITE_same-origin" +FAIL same-site unsafe-allow-outgoing document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site unsafe-allow-outgoing_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html new file mode 100644 index 0000000..b1a664d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site unsafe-allow-outgoing", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..f4b869b1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site_to_CROSS_ORIGIN_same-origin" +FAIL same-site document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html new file mode 100644 index 0000000..d0fc7c79 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https-expected.txt new file mode 100644 index 0000000..2386021 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "" +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site_to_SAME_ORIGIN_same-origin" +FAIL same-site document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html new file mode 100644 index 0000000..67d2523 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https-expected.txt new file mode 100644 index 0000000..36b7709 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-site_to_SAME_SITE_same-origin" +FAIL same-site document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-site_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html new file mode 100644 index 0000000..78b7ca8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="../resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-site", tests); // historical value, equivalent to "unsafe-none" + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.headers similarity index 100% rename from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html.headers rename to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/no-https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/no-https.html index 014ba1f..f4e926b2 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/no-https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/no-https.html
@@ -5,15 +5,14 @@ <script src=/resources/testharnessreport.js></script> <script> async_test(t => { - const popup = window.open("/common/blank.html"); - assert_equals(window, popup.opener); - - t.step_timeout(() => { - assert_false(popup.closed); - assert_equals(popup.location.pathname, "/common/blank.html"); + const popup = window.open("resources/call-functionCalledByOpenee.html"); + t.add_cleanup(() => { popup.close(); - t.done(); - }, 500); + }); + window.functionCalledByOpenee = t.step_func_done(() => { + assert_false(popup.closed); + }); + assert_equals(window, popup.opener); }, "Cross-Origin-Opener-Policy only works over secure contexts"); test(() => {
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-meta-http-equiv.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-meta-http-equiv.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-none.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-none.https.html deleted file mode 100644 index 6263345..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-none.https.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/common.js"></script> - -<div id=log></div> -<script> - -let tests = [ - // popup Origin, popup COOP, expect opener - [SAME_ORIGIN, "", true], - [SAME_ORIGIN, "jibberish", true], - [SAME_ORIGIN, "same-site", false], - [SAME_ORIGIN, "same-site unsafe-allow-outgoing", false], - [SAME_ORIGIN, "same-origin", false], - [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", false], - - [SAME_SITE, "", true], - [SAME_SITE, "jibberish", true], - [SAME_SITE, "same-site", false], - [SAME_SITE, "same-site unsafe-allow-outgoing", false], - [SAME_SITE, "same-origin", false], - [SAME_SITE, "same-origin unsafe-allow-outgoing", false], - - [CROSS_ORIGIN, "", true], - [CROSS_ORIGIN, "jibberish", true], - [CROSS_ORIGIN, "same-site", false], - [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], - [CROSS_ORIGIN, "same-origin", false], - [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], -]; - -run_coop_tests("none", tests); - -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..21a13c3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin-allow-popups_to_CROSS_ORIGIN_same-origin" +FAIL same-origin-allow-popups document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin-allow-popups_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html new file mode 100644 index 0000000..cea3788b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin-allow-popups", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.headers new file mode 100644 index 0000000..d83ed86 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.headers
@@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: same-origin-allow-popups
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https-expected.txt new file mode 100644 index 0000000..2fc12a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin-allow-popups_to_SAME_ORIGIN_same-origin" +PASS same-origin-allow-popups document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html new file mode 100644 index 0000000..a50231f8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", true], +]; + +run_coop_tests("same-origin-allow-popups", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.headers new file mode 100644 index 0000000..d83ed86 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.headers
@@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: same-origin-allow-popups
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https-expected.txt new file mode 100644 index 0000000..001f3bbd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin-allow-popups_to_SAME_SITE_same-origin" +FAIL same-origin-allow-popups document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin-allow-popups_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html new file mode 100644 index 0000000..53b4263 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin-allow-popups", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.headers new file mode 100644 index 0000000..d83ed86 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.headers
@@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: same-origin-allow-popups
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html index 65ec3b26..d4005ac 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html
@@ -6,10 +6,12 @@ async_test(t => { const popup = window.open("resources/coop-coep.py?coop=same-origin&coep=&navigate=about:blank"); assert_equals(window, popup.opener); - t.step_timeout(() => { - assert_equals(popup.location.href, "about:blank"); - popup.close(); - t.done(); - }, 500); + window.onload = t.step_func(() => { + t.step_timeout(() => { + assert_equals(popup.location.href, "about:blank"); + popup.close(); + t.done(); + }, 1500); + }); }, "Navigating a popup to about:blank"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html deleted file mode 100644 index 2f8ebc3..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-unsafe-allow-outgoing.https.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/common.js"></script> - -<div id=log></div> -<script> - -let tests = [ - // popup Origin, popup COOP, expect opener - [SAME_ORIGIN, "", true], - [SAME_ORIGIN, "jibberish", true], - [SAME_ORIGIN, "same-site", false], - [SAME_ORIGIN, "same-site unsafe-allow-outgoing", false], - [SAME_ORIGIN, "same-origin", false], - [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], - - [SAME_SITE, "", true], - [SAME_SITE, "jibberish", true], - [SAME_SITE, "same-site", false], - [SAME_SITE, "same-site unsafe-allow-outgoing", false], - [SAME_SITE, "same-origin", false], - [SAME_SITE, "same-origin unsafe-allow-outgoing", false], - - [CROSS_ORIGIN, "", true], - [CROSS_ORIGIN, "jibberish", true], - [CROSS_ORIGIN, "same-site", false], - [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], - [CROSS_ORIGIN, "same-origin", false], - [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], -]; - -run_coop_tests("same-origin_unsafe-allow-outgoing", tests); - -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..269243a55 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_unsafe-none" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_jibberish" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_same-site" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_same-site-unsafe-allow-outgoing" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_same-origin-unsafe-allow-outgoing" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_same-origin" +FAIL same-origin document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html new file mode 100644 index 0000000..9f7d27b3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", false], + [CROSS_ORIGIN, "unsafe-none", false], + [CROSS_ORIGIN, "jibberish", false], + [CROSS_ORIGIN, "same-site", false], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https-expected.txt new file mode 100644 index 0000000..cc419c0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_unsafe-none" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "jibberish" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_jibberish" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "same-site" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_same-site" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_same-site-unsafe-allow-outgoing" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_same-origin-unsafe-allow-outgoing" +PASS same-origin document opening popup to https://web-platform.test:8444 with COOP: "same-origin" +FAIL same-origin document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html new file mode 100644 index 0000000..c84219a80 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", false], + [SAME_ORIGIN, "unsafe-none", false], + [SAME_ORIGIN, "jibberish", false], + [SAME_ORIGIN, "same-site", false], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", true], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html.headers similarity index 100% rename from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers rename to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https-expected.txt new file mode 100644 index 0000000..4dec82fe --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "" assert_equals: expected "" but got "same-origin_to_SAME_SITE_" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" assert_equals: expected "" but got "same-origin_to_SAME_SITE_unsafe-none" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" assert_equals: expected "" but got "same-origin_to_SAME_SITE_jibberish" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" assert_equals: expected "" but got "same-origin_to_SAME_SITE_same-site" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_SAME_SITE_same-site-unsafe-allow-outgoing" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" assert_equals: expected "" but got "same-origin_to_SAME_SITE_same-origin-unsafe-allow-outgoing" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "same-origin_to_SAME_SITE_same-origin" +FAIL same-origin document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "same-origin_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html new file mode 100644 index 0000000..b875cc2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", false], + [SAME_SITE, "unsafe-none", false], + [SAME_SITE, "jibberish", false], + [SAME_SITE, "same-site", false], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", false], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("same-origin", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.headers similarity index 100% copy from third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html.headers copy to third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.headers
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html deleted file mode 100644 index 964011ff..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin.https.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/common.js"></script> - -<div id=log></div> -<script> - -let tests = [ - // popup Origin, popup COOP, expect opener - [SAME_ORIGIN, "", false], - [SAME_ORIGIN, "jibberish", false], - [SAME_ORIGIN, "same-site", false], - [SAME_ORIGIN, "same-site unsafe-allow-outgoing", false], - [SAME_ORIGIN, "same-origin", true], - [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", false], - - [SAME_SITE, "", false], - [SAME_SITE, "jibberish", false], - [SAME_SITE, "same-site", false], - [SAME_SITE, "same-site unsafe-allow-outgoing", false], - [SAME_SITE, "same-origin", false], - [SAME_SITE, "same-origin unsafe-allow-outgoing", false], - - [CROSS_ORIGIN, "", false], - [CROSS_ORIGIN, "jibberish", false], - [CROSS_ORIGIN, "same-site", false], - [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], - [CROSS_ORIGIN, "same-origin", false], - [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], -]; - -run_coop_tests("same-origin", tests); - -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html deleted file mode 100644 index 18ee909..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site-unsafe-allow-outgoing.https.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/common.js"></script> - -<div id=log></div> -<script> - -let tests = [ - // popup Origin, popup COOP, expect opener - [SAME_ORIGIN, "", true], - [SAME_ORIGIN, "jibberish", true], - [SAME_ORIGIN, "same-site", false], - [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], - [SAME_ORIGIN, "same-origin", false], - [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", false], - - [SAME_SITE, "", true], - [SAME_SITE, "jibberish", true], - [SAME_SITE, "same-site", false], - [SAME_SITE, "same-site unsafe-allow-outgoing", true], - [SAME_SITE, "same-origin", false], - [SAME_SITE, "same-origin unsafe-allow-outgoing", false], - - [CROSS_ORIGIN, "", true], - [CROSS_ORIGIN, "jibberish", true], - [CROSS_ORIGIN, "same-site", false], - [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], - [CROSS_ORIGIN, "same-origin", false], - [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], -]; - -run_coop_tests("same-site_unsafe-allow-outgoing", tests); - -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html deleted file mode 100644 index 9a0db27..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-site.https.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/common.js"></script> - -<div id=log></div> -<script> - -let tests = [ - // popup Origin, popup COOP, expect opener - [SAME_ORIGIN, "", false], - [SAME_ORIGIN, "jibberish", false], - [SAME_ORIGIN, "same-site", true], - [SAME_ORIGIN, "same-site unsafe-allow-outgoing", false], - [SAME_ORIGIN, "same-origin", false], - [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", false], - - [SAME_SITE, "", false], - [SAME_SITE, "jibberish", false], - [SAME_SITE, "same-site", true], - [SAME_SITE, "same-site unsafe-allow-outgoing", false], - [SAME_SITE, "same-origin", false], - [SAME_SITE, "same-origin unsafe-allow-outgoing", false], - - [CROSS_ORIGIN, "", false], - [CROSS_ORIGIN, "jibberish", false], - [CROSS_ORIGIN, "same-site", false], - [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", false], - [CROSS_ORIGIN, "same-origin", false], - [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", false], -]; - -run_coop_tests("same-site", tests); - -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..7b65f9dc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unsafe-none_to_CROSS_ORIGIN_same-origin" +FAIL unsafe-none document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unsafe-none_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html new file mode 100644 index 0000000..5cbf5b4c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("unsafe-none", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https-expected.txt new file mode 100644 index 0000000..e3c14527 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "" +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unsafe-none_to_SAME_ORIGIN_same-origin" +FAIL unsafe-none document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unsafe-none_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html new file mode 100644 index 0000000..f8a4ebe71 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("unsafe-none", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html.headers new file mode 100644 index 0000000..073ce7a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html.headers
@@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: unsafe-none
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https-expected.txt new file mode 100644 index 0000000..92e7b75 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unsafe-none_to_SAME_SITE_same-origin" +FAIL unsafe-none document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unsafe-none_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html new file mode 100644 index 0000000..e38acf4f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("unsafe-none", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https-expected.txt new file mode 100644 index 0000000..33d61be --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "" +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "unsafe-none" +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "jibberish" +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "same-site" +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unspecified_to_CROSS_ORIGIN_same-origin" +FAIL unspecified document opening popup to https://not-web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unspecified_to_CROSS_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html new file mode 100644 index 0000000..d89398c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [CROSS_ORIGIN, "", true], + [CROSS_ORIGIN, "unsafe-none", true], + [CROSS_ORIGIN, "jibberish", true], + [CROSS_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [CROSS_ORIGIN, "same-origin", false], + [CROSS_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("unspecified", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https-expected.txt new file mode 100644 index 0000000..627aa8ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "" +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "unsafe-none" +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "jibberish" +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "same-site" +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unspecified document opening popup to https://web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unspecified document opening popup to https://web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unspecified_to_SAME_ORIGIN_same-origin" +FAIL unspecified document opening popup to https://web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unspecified_to_SAME_ORIGIN_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html new file mode 100644 index 0000000..cb6fc02a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_ORIGIN, "", true], + [SAME_ORIGIN, "unsafe-none", true], + [SAME_ORIGIN, "jibberish", true], + [SAME_ORIGIN, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_ORIGIN, "same-origin", false], + [SAME_ORIGIN, "same-origin-allow-popups", false], +]; + +run_coop_tests("unspecified", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https-expected.txt new file mode 100644 index 0000000..ff97a46 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "" +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "unsafe-none" +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "jibberish" +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site" +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "same-site unsafe-allow-outgoing" +PASS unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin unsafe-allow-outgoing" +FAIL unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin" assert_equals: expected "" but got "unspecified_to_SAME_SITE_same-origin" +FAIL unspecified document opening popup to https://www1.web-platform.test:8444 with COOP: "same-origin-allow-popups" assert_equals: expected "" but got "unspecified_to_SAME_SITE_same-origin-allow-popups" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html new file mode 100644 index 0000000..6e0edfa0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<meta content=timeout value=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/common.js"></script> + +<div id=log></div> +<script> + +let tests = [ + // popup Origin, popup COOP, expect opener + [SAME_SITE, "", true], + [SAME_SITE, "unsafe-none", true], + [SAME_SITE, "jibberish", true], + [SAME_SITE, "same-site", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-site unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin unsafe-allow-outgoing", true], // historical value, equivalent to "unsafe-none" + [SAME_SITE, "same-origin", false], + [SAME_SITE, "same-origin-allow-popups", false], +]; + +run_coop_tests("unspecified", tests); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resources/call-functionCalledByOpenee.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resources/call-functionCalledByOpenee.html new file mode 100644 index 0000000..d0ff0b7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resources/call-functionCalledByOpenee.html
@@ -0,0 +1,5 @@ +<!doctype html> +<meta charset=utf-8> +<script> +window.opener.functionCalledByOpenee(); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker-expected.txt b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker-expected.txt index 88f80ee..f03700f7 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 790 tests; 773 PASS, 17 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 790 tests; 774 PASS, 16 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS idl_test setup PASS idl_test validation PASS Partial interface Document: original interface defined @@ -467,7 +467,7 @@ PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "data" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "origin" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "lastEventId" with the proper type -FAIL MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type Unrecognized type WindowProxy +PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "ports" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object])" with the proper type PASS MessageEvent interface: calling initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object]) on new MessageEvent("message", { data: 5 }) with too few arguments must throw TypeError
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker.js b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker.js index b720d54..feddaf54 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker.js +++ b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.worker.js
@@ -7,6 +7,7 @@ ["html"], ["dom", "cssom", "touch-events", "uievents"], idlArray => { + idlArray.add_untested_idls('typedef Window WindowProxy;'); idlArray.add_objects({ WorkerLocation: ['self.location'], WorkerNavigator: ['self.navigator'],
diff --git a/third_party/blink/web_tests/external/wpt/lint.whitelist b/third_party/blink/web_tests/external/wpt/lint.whitelist index 6264476..353922a 100644 --- a/third_party/blink/web_tests/external/wpt/lint.whitelist +++ b/third_party/blink/web_tests/external/wpt/lint.whitelist
@@ -94,6 +94,7 @@ TRAILING WHITESPACE: webvtt/parsing/file-parsing/support/*.vtt TRAILING WHITESPACE: webvtt/parsing/file-parsing/tests/support/*.vtt TRAILING WHITESPACE: xhr/resources/headers-some-are-empty.asis +TRAILING WHITESPACE: cookies/http-state/resources/test-files/* # Intentional use of print statements PRINT STATEMENT: dom/nodes/Document-createElement-namespace-tests/generate.py
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/opaque-script.https.html b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/opaque-script.https.html new file mode 100644 index 0000000..7d21218 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/opaque-script.https.html
@@ -0,0 +1,71 @@ +<!doctype html> +<title>Cache Storage: verify scripts loaded from cache_storage are marked opaque</title> +<link rel="help" href="https://w3c.github.io/ServiceWorker/#cache-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testharness-helpers.js"></script> +<script src="resources/test-helpers.sub.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script> +'use strict'; + +const SW_URL = 'resources/opaque-script-sw.js'; +const BASE_SCOPE = './resources/opaque-script-frame.html'; +const SAME_ORIGIN_BASE = new URL('./resources/', self.location.href).href; +const CROSS_ORIGIN_BASE = new URL('./resources/', + get_host_info().HTTPS_REMOTE_ORIGIN + base_path()).href; + +function wait_for_error() { + return new Promise(resolve => { + self.addEventListener('message', function messageHandler(evt) { + if (evt.data.type !== 'ErrorEvent') + return; + self.removeEventListener('message', messageHandler); + resolve(evt.data.msg); + }); + }); +} + +// Load an iframe that dynamically adds a script tag that is +// same/cross origin and large/small. It then calls a function +// defined in that loaded script that throws an unhandled error. +// The resulting message exposed in the global onerror handler +// is reported back from this function. Opaque cross origin +// scripts should not expose the details of the uncaught exception. +async function get_error_message(t, mode, size) { + const script_base = mode === 'same-origin' ? SAME_ORIGIN_BASE + : CROSS_ORIGIN_BASE; + const script = script_base + `opaque-script-${size}.js`; + const scope = BASE_SCOPE + `?script=${script}`; + const reg = await service_worker_unregister_and_register(t, SW_URL, scope); + t.add_cleanup(_ => reg.unregister()); + assert_true(!!reg.installing); + await wait_for_state(t, reg.installing, 'activated'); + const error_promise = wait_for_error(); + const f = await with_iframe(scope); + t.add_cleanup(_ => f.remove()); + const error = await error_promise; + return error; +} + +promise_test(async t => { + const error = await get_error_message(t, 'same-origin', 'small'); + assert_true(error.includes('Intentional error')); +}, 'Verify small same-origin cache_storage scripts are not opaque.'); + +promise_test(async t => { + const error = await get_error_message(t, 'same-origin', 'large'); + assert_true(error.includes('Intentional error')); +}, 'Verify large same-origin cache_storage scripts are not opaque.'); + +promise_test(async t => { + const error = await get_error_message(t, 'cross-origin', 'small'); + assert_false(error.includes('Intentional error')); +}, 'Verify small cross-origin cache_storage scripts are opaque.'); + +promise_test(async t => { + const error = await get_error_message(t, 'cross-origin', 'large'); + assert_false(error.includes('Intentional error')); +}, 'Verify large cross-origin cache_storage scripts are opaque.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-frame.html b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-frame.html new file mode 100644 index 0000000..a57aace --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-frame.html
@@ -0,0 +1,21 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +</head> +<body> +<script> +self.addEventListener('error', evt => { + self.parent.postMessage({ type: 'ErrorEvent', msg: evt.message }, '*'); +}); + +const el = document.createElement('script'); +const params = new URLSearchParams(self.location.search); +el.src = params.get('script'); +el.addEventListener('load', evt => { + runScript(); +}); +document.body.appendChild(el); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-large.js b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-large.js new file mode 100644 index 0000000..7e1c598e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-large.js
@@ -0,0 +1,41 @@ +function runScript() { + throw new Error("Intentional error."); +} + +function unused() { + // The following string is intended to be relatively large since some + // browsers trigger different code paths based on script size. + return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a " + + "tortor ut orci bibendum blandit non quis diam. Aenean sit amet " + + "urna sit amet neque malesuada ultricies at vel nisi. Nunc et lacus " + + "est. Nam posuere erat enim, ac fringilla purus pellentesque " + + "cursus. Proin sodales eleifend lorem, eu semper massa scelerisque " + + "ac. Maecenas pharetra leo malesuada vulputate vulputate. Sed at " + + "efficitur odio. In rhoncus neque varius nibh efficitur gravida. " + + "Curabitur vitae dolor enim. Mauris semper lobortis libero sed " + + "congue. Donec felis ante, fringilla eget urna ut, finibus " + + "hendrerit lacus. Donec at interdum diam. Proin a neque vitae diam " + + "egestas euismod. Mauris posuere elementum lorem, eget convallis " + + "nisl elementum et. In ut leo ac neque dapibus pharetra quis ac " + + "velit. Integer pretium lectus non urna vulputate, in interdum mi " + + "lobortis. Sed laoreet ex et metus pharetra blandit. Curabitur " + + "sollicitudin non neque eu varius. Phasellus posuere congue arcu, " + + "in aliquam nunc fringilla a. Morbi id facilisis libero. Phasellus " + + "metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + + "tortor ut orci bibendum blandit non quis diam. Aenean sit amet " + + "urna sit amet neque malesuada ultricies at vel nisi. Nunc et lacus " + + "est. Nam posuere erat enim, ac fringilla purus pellentesque " + + "cursus. Proin sodales eleifend lorem, eu semper massa scelerisque " + + "ac. Maecenas pharetra leo malesuada vulputate vulputate. Sed at " + + "efficitur odio. In rhoncus neque varius nibh efficitur gravida. " + + "Curabitur vitae dolor enim. Mauris semper lobortis libero sed " + + "congue. Donec felis ante, fringilla eget urna ut, finibus " + + "hendrerit lacus. Donec at interdum diam. Proin a neque vitae diam " + + "egestas euismod. Mauris posuere elementum lorem, eget convallis " + + "nisl elementum et. In ut leo ac neque dapibus pharetra quis ac " + + "velit. Integer pretium lectus non urna vulputate, in interdum mi " + + "lobortis. Sed laoreet ex et metus pharetra blandit. Curabitur " + + "sollicitudin non neque eu varius. Phasellus posuere congue arcu, " + + "in aliquam nunc fringilla a. Morbi id facilisis libero. Phasellus " + + "metus."; +}
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-small.js b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-small.js new file mode 100644 index 0000000..8b890985 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-small.js
@@ -0,0 +1,3 @@ +function runScript() { + throw new Error("Intentional error."); +}
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-sw.js b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-sw.js new file mode 100644 index 0000000..4d882c6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/opaque-script-sw.js
@@ -0,0 +1,37 @@ +importScripts('test-helpers.sub.js'); +importScripts('/common/get-host-info.sub.js'); + +const NAME = 'foo'; +const SAME_ORIGIN_BASE = new URL('./', self.location.href).href; +const CROSS_ORIGIN_BASE = new URL('./', + get_host_info().HTTPS_REMOTE_ORIGIN + base_path()).href; + +const urls = [ + `${SAME_ORIGIN_BASE}opaque-script-small.js`, + `${SAME_ORIGIN_BASE}opaque-script-large.js`, + `${CROSS_ORIGIN_BASE}opaque-script-small.js`, + `${CROSS_ORIGIN_BASE}opaque-script-large.js`, +]; + +self.addEventListener('install', evt => { + evt.waitUntil(async function() { + const c = await caches.open(NAME); + const promises = urls.map(async function(u) { + const r = await fetch(u, { mode: 'no-cors' }); + await c.put(u, r); + }); + await Promise.all(promises); + }()); +}); + +self.addEventListener('fetch', evt => { + const url = new URL(evt.request.url); + if (!url.pathname.includes('opaque-script-small.js') && + !url.pathname.includes('opaque-script-large.js')) { + return; + } + evt.respondWith(async function() { + const c = await caches.open(NAME); + return c.match(evt.request); + }()); +});
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content-expected.txt deleted file mode 100644 index 69de21eb..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content-expected.txt +++ /dev/null
@@ -1,53 +0,0 @@ -This test checks that the align-content property is applied correctly. - -direction: LTR | align-content: 'center' - -PASS - -direction: LTR | align-content: 'left' - -PASS - -direction: LTR | align-content: 'right' - -PASS - -direction: LTR | align-content: 'start' - -PASS - -direction: LTR | align-content: 'end' - -PASS - -direction: LTR | align-content: 'flex-start' - -PASS - -direction: LTR | align-content: 'flex-end - -PASS - -direction: LTR | align-content: 'auto' (resolved to 'start') - -PASS - -direction: RTL | align-content: 'center' - -PASS - -direction: RTL | align-content: 'left' - -PASS - -direction: RTL | align-content: 'right' - -PASS - -direction: RTL | align-content: 'start' - -PASS - -direction: RTL | align-content: 'end' - -PASS
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content.html deleted file mode 100644 index f697eae9..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-content.html +++ /dev/null
@@ -1,167 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/check-layout.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid: 100px 100px / 50px 50px; - position: relative; - width: 200px; - height: 300px; -} - -.verticalGrid { - width: 300px; - height: 200px; -} - -.cell { - width: 20px; - height: 40px; -} -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the align-content property is applied correctly.</p> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'center'</p> - <div class="grid alignContentCenter" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="50" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="50" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="150" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'left'</p> - <div class="grid alignContentLeft" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'right'</p> - <div class="grid alignContentRight" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'start'</p> - <div class="grid alignContentStart" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'end'</p> - <div class="grid alignContentEnd" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'flex-start'</p> - <div class="grid alignContentFlexStart" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: LTR | align-content: 'flex-end</p> - <div class="grid alignContentFlexEnd" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- Default alignment and initial values. --> -<div style="position: relative"> - <p>direction: LTR | align-content: 'auto' (resolved to 'start')</p> - <div class="grid" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction. --> -<div style="position: relative"> - <p>direction: RTL | align-content: 'center'</p> - <div class="grid directionRTL alignContentCenter" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="50" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="50" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="150" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="150" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'left'</p> - <div class="grid directionRTL alignContentLeft" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'right'</p> - <div class="grid directionRTL alignContentRight" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'start'</p> - <div class="grid directionRTL alignContentStart" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <p>direction: RTL | align-content: 'end'</p> - <div class="grid directionRTL alignContentEnd" data-expected-width="200" data-expected-height="300"> - <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-expected.txt deleted file mode 100644 index 5ec7e800..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-expected.txt +++ /dev/null
@@ -1,18 +0,0 @@ -This test checks that the align-self property is applied correctly. - -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-lr.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-lr.html deleted file mode 100644 index 4b81040c22..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-lr.html +++ /dev/null
@@ -1,236 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 100px 200px; - grid-template-rows: 200px 200px; - padding: 10px 15px 20px 30px; - border-width: 5px 10px 15px 20px; - border-style: dotted; - border-color: blue; - position: relative; -} - -.cell { - width: 20px; - height: 40px; - margin: 4px 8px 12px 16px; -} -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids.</p> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content verticalLR" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content verticalLR itemsCenter" data-expected-width="475" data-expected-height="350"> - <div class="firstRowFirstColumn cell" data-offset-x="124" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content verticalLR itemsEnd" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'left' | justify-items: 'left'</p> - <div class="grid fit-content verticalLR itemsLeft" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content verticalLR alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction. --> -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content verticalLR directionRTL" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content verticalLR directionRTL itemsCenter" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="124" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content verticalLR directionRTL itemsEnd" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'left'</p> - <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-rl.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-rl.html deleted file mode 100644 index d41754fd..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-rl.html +++ /dev/null
@@ -1,237 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 100px 200px; - grid-template-rows: 200px 200px; - padding: 10px 15px 20px 30px; - border-width: 5px 10px 15px 20px; - border-style: dotted; - border-color: blue; - position: relative; -} - -.cell { - width: 20px; - height: 40px; - margin: 4px 8px 12px 16px; -} -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids.</p> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content verticalRL" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content verticalRL itemsCenter" data-expected-width="475" data-expected-height="350"> - <div class="firstRowFirstColumn cell" data-offset-x="324" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content verticalRL itemsEnd" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'left' | justify-items: 'left'</p> - <div class="grid fit-content verticalRL itemsLeft" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content verticalRL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - - -<!-- RTL direction. --> -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content verticalRL directionRTL" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content verticalRL directionRTL itemsCenter" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="324" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content verticalRL directionRTL itemsEnd" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'left'</p> - <div class="grid fit-content verticalRL directionRTL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content verticalRL directionRTL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> - <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content verticalRL directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content verticalRL directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content verticalRL directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content verticalRL directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding.html deleted file mode 100644 index f43f0e80..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-margin-border-padding.html +++ /dev/null
@@ -1,236 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 100px 200px; - grid-template-rows: 200px 200px; - padding: 10px 15px 20px 30px; - border-width: 5px 10px 15px 20px; - border-style: dotted; - border-color: blue; - position: relative; -} - -.cell { - width: 20px; - height: 40px; - margin: 4px 8px 12px 16px; -} -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties.</p> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="146" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content itemsCenter" data-expected-width="375" data-expected-height="450"> - <div class="firstRowFirstColumn cell" data-offset-x="74" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="224" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content itemsEnd" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'start' | justify-items: 'left'</p> - <div class="grid fit-content alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content alignItemsStart justifyItemsRight" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="146" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: LTR - (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction. --> -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> - <div class="grid fit-content directionRTL" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowFirstColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'center' | justify-items: 'center'</p> - <div class="grid fit-content directionRTL itemsCenter" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="274" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'end' | justify-items: 'end'</p> - <div class="grid fit-content directionRTL itemsEnd" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'left'</p> - <div class="grid fit-content directionRTL alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL | align-items: 'start' | justify-items: 'right'</p> - <div class="grid fit-content directionRTL alignItemsStart justifytemsRight" data-expected-width="375" data-expected-height="450"> - <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450"> - <div class="directionLTR cell firstRowFirstColumn" data-offset-x="302" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> - <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div> - <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> - direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> - <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450"> - <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> - <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> - <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> - <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow-expected.txt deleted file mode 100644 index ee761ee..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow-expected.txt +++ /dev/null
@@ -1,10 +0,0 @@ -This test checks that the 'overflow' keyword is applied correctly for 'align' and 'justify' properties. - -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow.html deleted file mode 100644 index 53a4c9f2..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-overflow.html +++ /dev/null
@@ -1,134 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/check-layout.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 150px 150px; - grid-template-rows: 120px 120px 120px; - margin-bottom: 20px; -} - -.cellOverflowWidth { - width: 180px; - height: 40px; -} - -.cellOverflowHeight { - width: 50px; - height: 150px; -} - -.cellWithNoOverflow { - width: 50px; - height: 40px; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the 'overflow' keyword is applied correctly for 'align' and 'justify' properties.</p> - -<div style="position: relative"> - <div class="grid fit-content alignItemsCenter justifyItemsCenter" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-15" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="135" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsCenterUnsafe justifyItemsCenterUnsafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="-15" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="200" data-offset-y="105" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsCenterSafe justifyItemsCenterSafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsCenterSafe justifyItemsCenterSafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowHeight secondRowSecondColumn alignSelfCenterSafe justifySelfCenterSafe" data-offset-x="200" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsEnd justifyItemsEnd" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-30" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow secondRowFirstColumn justifySelfCenter" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="120" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsEndUnsafe justifyItemsEndUnsafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="-30" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn alignSelfCenter" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="90" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsEndSafe justifyItemsEndSafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow secondRowFirstColumn justifySelfCenterUnsafe" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsEndSafe justifyItemsEndSafe" data-expected-width="300" data-expected-height="360"> - <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - <div class="cellWithNoOverflow firstRowSecondColumn alignSelfCenterUnsafe" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> - <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div> - <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-expected.txt deleted file mode 100644 index 9911dff2..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-expected.txt +++ /dev/null
@@ -1,18 +0,0 @@ -This test checks that the 'stretch' value is applied correctly for 'align' and 'justify' properties. - -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS -PASS
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-with-orthogonal-flows.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-with-orthogonal-flows.html deleted file mode 100644 index 75d58ea..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch-with-orthogonal-flows.html +++ /dev/null
@@ -1,119 +0,0 @@ -<!DOCTYPE html> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<style> -body { - margin: 0; -} -.container { - position: relative; -} -.grid { - grid-template-columns: 100px 100px; - grid-template-rows: 150px 150px; - font: 10px/1 Ahem; -} -.widthAndHeightSet { - width: 20px; - height: 40px; -} -.onlyWidthSet { width: 20px; } -.onlyHeightSet { height: 40px; } -.maxHeight { max-height: 160px; } -.maxWidth { max-width: 90px; } -.minWidth { min-width: 120px; } -.minHeight { min-height: 220px; } -.topAutoMargin { margin-top: auto; } -.bottomAutoMargin { margin-bottom: auto; } -.leftAutoMargin { margin-left: auto; } -.rightAutoMargin { margin-right: auto; } -</style> -<body onload="checkLayout('.grid')"> -<div id="log"></div> -<p>This test checks that stretching alignment works as expected with orthogonal flows.</p> - -<p>HORIZONTAL vs VERTICAL-RL</p> -<p><b>row1/col1:</b> fixed width and height - <b>row1/col2:</b> fixed width and auto height - <b>row2/col1:</b> auto width and fixed height - <b>row2/col2:</b> auto width and height, but start.</p> -<div class="container"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> - <div class="verticalRL firstRowFirstColumn selfStretch widthAndHeightSet " data-expected-width="20" data-expected-height="40">XXX</div> - <div class="verticalRL firstRowSecondColumn sefStretch onlyWidthSet " data-expected-width="20" data-expected-height="150">XXX</div> - <div class="verticalRL secondRowFirstColumn selfStretch onlyHeightSet " data-expected-width="100" data-expected-height="40">XXX</div> - <div class="verticalRL secondRowSecondColumn selfSelfStart " data-expected-width="10" data-expected-height="30">XXX</div> - </div> -</div> -<p><b>row1/co1l:</b> bottom auto margin - <b>row1/col2:</b> left auto margin - <b>row2/col1:</b> top auto margin - <b>row2/col2:</b> right auto margin.</p> -<div class="container"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> - <div class="verticalRL firstRowFirstColumn selfStretch bottomAutoMargin " data-expected-width="100" data-expected-height="30">XXX</div> - <div class="verticalRL firstRowSecondColumn seffStretch leftAutoMargin " data-expected-width="10" data-expected-height="150">XXX</div> - <div class="verticalRL secondRowFirstColumn selffStretch topAutoMargin " data-expected-width="100" data-expected-height="30">XXX</div> - <div class="verticalRL secondRowSecondColumn selffStretch rightAutoMargin " data-expected-width="10" data-expected-height="150">XXX</div> - </div> -</div> - -<p>HORIZONTAL vs VERTICAL-LR</p> -<p><b>row1/col1:</b> fixed width and height - <b>row1/col2:</b> fixed width and auto height - <b>row2/col1:</b> auto width and fixed height - <b>row2/col2:</b> auto width and height, but start.</p> -<div class="container"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> - <div class="verticalLR firstRowFirstColumn selfStretch widthAndHeightSet " data-expected-width="20" data-expected-height="40">XXX</div> - <div class="verticalLR firstRowSecondColumn sefStretch onlyWidthSet " data-expected-width="20" data-expected-height="150">XXX</div> - <div class="verticalLR secondRowFirstColumn selfStretch onlyHeightSet " data-expected-width="100" data-expected-height="40">XXX</div> - <div class="verticalLR secondRowSecondColumn selfSelfStart " data-expected-width="10" data-expected-height="30">XXX</div> - </div> -</div> -<p><b>row1/co1l:</b> bottom auto margin - <b>row1/col2:</b> left auto margin - <b>row2/col1:</b> top auto margin - <b>row2/col2:</b> right auto margin.</p> -<div class="container"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> - <div class="verticalLR firstRowFirstColumn selfStretch bottomAutoMargin " data-expected-width="100" data-expected-height="30">XXX</div> - <div class="verticalLR firstRowSecondColumn seffStretch leftAutoMargin " data-expected-width="10" data-expected-height="150">XXX</div> - <div class="verticalLR secondRowFirstColumn selffStretch topAutoMargin " data-expected-width="100" data-expected-height="30">XXX</div> - <div class="verticalLR secondRowSecondColumn selffStretch rightAutoMargin " data-expected-width="10" data-expected-height="150">XXX</div> - </div> -</div> - -<p>VERTICAL-RL vs HORIZONTAL</p> -<p><b>row1/col1:</b> fixed width and height - <b>row1/col2:</b> fixed width and auto height - <b>row2/col1:</b> auto width and fixed height - <b>row2/col2:</b> auto width and height, but start.</p> -<div class="container"> - <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200"> - <div class="horizonalTB firstRowFirstColumn selfStretch widthAndHeightSet " data-expected-width="20" data-expected-height="40">XXX</div> - <div class="horizonalTB firstRowSecondColumn sefStretch onlyWidthSet " data-expected-width="20" data-expected-height="100">XXX</div> - <div class="horizonalTB secondRowFirstColumn selfStretch onlyHeightSet " data-expected-width="150" data-expected-height="40">XXX</div> - <div class="horizonalTB secondRowSecondColumn selfSelfStart " data-expected-width="10" data-expected-height="30">XXX</div> - </div> -</div> -<p><b>row1/co1l:</b> bottom auto margin - <b>row1/col2:</b> left auto margin - <b>row2/col1:</b> top auto margin - <b>row2/col2:</b> right auto margin.</p> -<div class="container"> - <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200"> - <div class="horizonalTB firstRowFirstColumn selfStretch bottomAutoMargin " data-expected-width="150" data-expected-height="30">XXX</div> - <div class="horizonalTB firstRowSecondColumn seffStretch leftAutoMargin " data-expected-width="10" data-expected-height="100">XXX</div> - <div class="horizonalTB secondRowFirstColumn selffStretch topAutoMargin " data-expected-width="150" data-expected-height="30">XXX</div> - <div class="horizonalTB secondRowSecondColumn selffStretch rightAutoMargin " data-expected-width="10" data-expected-height="100">XXX</div> - </div> -</div> - -<p>VERTICAL-LR vs HORIZONTAL</p> -<p><b>row1/col1:</b> fixed width and height - <b>row1/col2:</b> fixed width and auto height - <b>row2/col1:</b> auto width and fixed height - <b>row2/col2:</b> auto width and height, but start.</p> -<div class="container"> - <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200"> - <div class="horizonalTB firstRowFirstColumn selfStretch widthAndHeightSet " data-expected-width="20" data-expected-height="40">XXX</div> - <div class="horizonalTB firstRowSecondColumn sefStretch onlyWidthSet " data-expected-width="20" data-expected-height="100">XXX</div> - <div class="horizonalTB secondRowFirstColumn selfStretch onlyHeightSet " data-expected-width="150" data-expected-height="40">XXX</div> - <div class="horizonalTB secondRowSecondColumn selfSelfStart " data-expected-width="10" data-expected-height="30">XXX</div> - </div> -</div> -<p><b>row1/co1l:</b> bottom auto margin - <b>row1/col2:</b> left auto margin - <b>row2/col1:</b> top auto margin - <b>row2/col2:</b> right auto margin.</p> -<div class="container"> - <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200"> - <div class="horizonalTB firstRowFirstColumn selfStretch bottomAutoMargin " data-expected-width="150" data-expected-height="30">XXX</div> - <div class="horizonalTB firstRowSecondColumn seffStretch leftAutoMargin " data-expected-width="10" data-expected-height="100">XXX</div> - <div class="horizonalTB secondRowFirstColumn selffStretch topAutoMargin " data-expected-width="150" data-expected-height="30">XXX</div> - <div class="horizonalTB secondRowSecondColumn selffStretch rightAutoMargin " data-expected-width="10" data-expected-height="100">XXX</div> - </div> -</div> - -</body>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch.html deleted file mode 100644 index 3a1d6613..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align-justify-stretch.html +++ /dev/null
@@ -1,184 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/check-layout.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 100px 100px; - grid-template-rows: 200px 200px; - margin-bottom: 20px; -} - -.widthAndHeightSet { - width: 20px; - height: 40px; -} -.onlyWidthSet { width: 20px; } -.onlyHeightSet { height: 40px; } -.maxHeight { max-height: 160px; } -.maxWidth { max-width: 90px; } -.minWidth { min-width: 120px; } -.minHeight { min-height: 220px; } -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the 'stretch' value is applied correctly for 'align' and 'justify' properties.</p> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStretch justifySelfStart firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="0" data-expected-height="200"></div> - <div class="widthAndHeightSet alignSelfStretch justifySelfStart firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet alignSelfStretch justifySelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet alignSelfStretch justifySelfStart secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="0" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStart justifySelfStretch firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="0"></div> - <div class="widthAndHeightSet alignSelfStart justifySelfStretch firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet alignSelfStart justifySelfStretch secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="0"></div> - <div class="onlyHeightSet alignSelfStart justifySelfStretch secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="maxHeight alignSelfStretch justifySelfStart firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="0" data-expected-height="160"></div> - <div class="minWidth widthAndHeightSet alignSelfStretch justifySelfStart firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="120" data-expected-height="40"></div> - <div class="minHeight onlyWidthSet alignSelfStretch justifySelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="220"></div> - <div class="maxWidth onlyHeightSet alignSelfStretch justifySelfStretch secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="90" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStretch justifySelfStretch firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet alignSelfStretch justifySelfStretch firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet alignSelfStretch justifySelfStretch secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet alignSelfStretch justifySelfStretch secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsStretch justifyItemsStart" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="0" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="0" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsStart justifyItemsStretch" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="0"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="0"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsStretch justifyItemsStretch" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content alignItemsAuto justifyItemsAuto" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="100" data-expected-height="200"></div> - <div class="secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="200"></div> - </div> -</div> - -<!-- RTL direction (it should not affect the block-flow direction). --> -<div style="position: relative"> - <div class="grid fit-content directionRTL alignItemsStretch justifyItemsStretch" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="180" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="0" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction (it should not affect the block-flow) with opposite directions grid container vs grid item. --> -<div style="position: relative"> - <div class="grid fit-content alignItemsStretch justifyItemsStretch" data-expected-width="200" data-expected-height="400"> - <div class="firstRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="widthAndHeightSet firstRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="200"></div> - <div class="onlyHeightSet secondRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="200" data-expected-width="100" data-expected-height="40"></div> - </div> -</div> - -<!-- Vertical RL writing mode. --> -<div style="position: relative"> - <div class="grid fit-content verticalRL alignItemsStretch justifyItemsStretch" data-expected-width="400" data-expected-height="200"> - <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="200" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalRL" data-expected-width="400" data-expected-height="200"> - <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="firstRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="200" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="200" data-expected-height="100"></div> - </div> -</div> - -<!-- Vertical LR writing mode. --> -<div style="position: relative"> - <div class="grid fit-content verticalLR alignItemsStretch justifyItemsStretch" data-expected-width="400" data-expected-height="200"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="widthAndHeightSet firstRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="onlyWidthSet secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div> - <div class="onlyHeightSet secondRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="200" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalLR" data-expected-width="400" data-expected-height="200"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="200" data-expected-height="100"></div> - <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="200" data-expected-height="100"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-align.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-align.html deleted file mode 100644 index b628063..0000000 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-align.html +++ /dev/null
@@ -1,240 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link href="../css-intrinsic-dimensions/resources/width-keyword-classes.css" rel="stylesheet"> -<link href="resources/grid.css" rel="stylesheet"> -<link href="resources/grid-alignment.css" rel="stylesheet"> -<script src="../../resources/check-layout.js"></script> -<style> -body { - margin: 0; -} - -.grid { - grid-template-columns: 100px 100px; - grid-template-rows: 200px 200px; - margin-bottom: 20px; -} - -.cell { - width: 20px; - height: 40px; -} - -.item { - width: 8px; - height: 16px; - background: black; -} - -</style> -</head> -<body onload="checkLayout('.grid')"> - -<p>This test checks that the align-self property is applied correctly.</p> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStretch firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="cell alignSelfStart firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd firstRowSecondColumn" data-offset-x="100" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfCenter secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfRight secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfLeft secondRowSecondColumn" data-offset-x="100" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn" data-offset-x="0" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfFlexStart firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="100" data-offset-y="360" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- Default alignment and initial values. --> -<div style="position: relative"> - <div class="grid fit-content alignItemsCenter" data-expected-width="200" data-expected-height="400"> - <div class="cell alignSelfAuto firstRowFirstColumn" data-offset-x="0" data-offset-y="80" data-expected-width="20" data-expected-height="40"></div> - <div class="cell firstRowSecondColumn" data-offset-x="100" data-offset-y="80" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="100" data-offset-y="360" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfAuto firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="cell firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd secondRowSecondColumn" data-offset-x="100" data-offset-y="360" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction (it should not affect the block-flow direction). --> -<div style="position: relative"> - <div class="grid fit-content directionRTL" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStretch firstRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="cell alignSelfStart firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd firstRowSecondColumn" data-offset-x="80" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfCenter secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfRight secondRowSecondColumn" data-offset-x="80" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfLeft secondRowSecondColumn" data-offset-x="80" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content directionRTL" data-expected-width="200" data-expected-height="400"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn" data-offset-x="180" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfFlexStart firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="180" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="80" data-offset-y="360" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- RTL direction (it should not affect the block-flow) with opposite directions grid container vs grid item. --> -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="alignSelfStretch firstRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> - <div class="cell alignSelfStart firstRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd firstRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfCenter secondRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="280" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfRight secondRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfLeft secondRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content" data-expected-width="200" data-expected-height="400"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfFlexStart firstRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn directionRTL" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn directionRTL" data-offset-x="100" data-offset-y="360" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- Vertical RL writing mode. --> -<div style="position: relative"> - <div class="grid fit-content verticalRL" data-expected-width="400" data-expected-height="200"> - <div class="alignSelfStretch firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="cell alignSelfStart firstRowSecondColumn" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd firstRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfCenter secondRowFirstColumn" data-offset-x="90" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfRight secondRowSecondColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfLeft secondRowSecondColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalRL" data-expected-width="400" data-expected-height="200"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfFlexStart firstRowSecondColumn" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- Vertical LR writing mode. --> -<div style="position: relative"> - <div class="grid fit-content verticalLR" data-expected-width="400" data-expected-height="200"> - <div class="alignSelfStretch firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> - <div class="cell alignSelfStart firstRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfEnd firstRowSecondColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfCenter secondRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfRight secondRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfLeft secondRowSecondColumn" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalLR" data-expected-width="400" data-expected-height="200"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfFlexStart firstRowSecondColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div> - </div> -</div> - -<!-- Vertical RL writing mode with opposite block-flow directions grid container vs grid item. --> -<div style="position: relative"> - <div class="grid fit-content verticalRL" data-expected-width="400" data-expected-height="200"> - <div class="alignSelfStretch firstRowFirstColumn verticalLR" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="100"> - </div> - <div class="cell alignSelfStart firstRowSecondColumn verticalLR" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfEnd firstRowSecondColumn verticalLR" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfCenter secondRowFirstColumn verticalLR" data-offset-x="90" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfRight secondRowSecondColumn verticalLR" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfLeft secondRowSecondColumn verticalLR" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalRL" data-expected-width="400" data-expected-height="200"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn verticalLR" data-offset-x="200" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfFlexStart firstRowSecondColumn verticalLR" data-offset-x="380" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfSelfStart secondRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn verticalLR" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - </div> -</div> - -<!-- Vertical LR writing mode with opposite block-flow directions grid container vs grid item. --> -<div style="position: relative"> - <div class="grid fit-content verticalLR" data-expected-width="400" data-expected-height="200"> - <div class="alignSelfStretch firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"> - </div> - <div class="cell alignSelfStart firstRowSecondColumn verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfEnd firstRowSecondColumn verticalRL" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfCenter secondRowFirstColumn verticalRL" data-offset-x="290" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfRight secondRowSecondColumn verticalRL" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfLeft secondRowSecondColumn verticalRL" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - </div> -</div> - -<div style="position: relative"> - <div class="grid fit-content verticalLR" data-expected-width="400" data-expected-height="200"> - <div class="cell alignSelfFlexEnd firstRowFirstColumn verticalRL" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfFlexStart firstRowSecondColumn verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfSelfStart secondRowFirstColumn verticalRL" data-offset-x="380" data-offset-y="0" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - <div class="cell alignSelfSelfEnd secondRowSecondColumn verticalRL" data-offset-x="200" data-offset-y="100" data-expected-width="20" data-expected-height="40"> - <div class="item"></div> - </div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/fast/forms/resources/picker-common.js b/third_party/blink/web_tests/fast/forms/resources/picker-common.js index 8db456d..9444002 100644 --- a/third_party/blink/web_tests/fast/forms/resources/picker-common.js +++ b/third_party/blink/web_tests/fast/forms/resources/picker-common.js
@@ -11,8 +11,8 @@ setTimeout(popupOpenCallback, 20); } -function waitUntilClosing(callback, customDelay) { - setTimeout(callback, (customDelay !== undefined) ? customDelay : 1); +function waitUntilClosing(callback) { + setTimeout(callback, 1); } function rootWindow() { @@ -34,6 +34,34 @@ // - INPUT color with DATALIST // - INPUT date/datetime-local/month/week function openPicker(element, callback, errorCallback) { + popupWindow = openPickerHelper(element); + if (typeof callback === "function" && popupWindow) + setPopupOpenCallback(callback); + else if (typeof errorCallback === "function" && !popupWindow) + errorCallback(); +} + +// openPickerWithPromise opens a picker UI for the following types: +// - menulist SELECT +// - INPUT color +// - INPUT date/datetime-local/month/week +// +// Returns a Promise that resolves when the popup has been opened. +function openPickerWithPromise(element) { + return new Promise(function(resolve, reject) { + popupWindow = openPickerHelper(element); + if (popupWindow) { + popupWindow.addEventListener("didOpenPicker", resolve, false); + } else { + reject(); + } + }); +} + +// Helper function for openPicker and openPickerWithPromise. +// Performs the keystrokes that will cause the picker to open, +// and returns the popup window, or null. +function openPickerHelper(element) { element.offsetTop; // Force to lay out element.focus(); if (element.tagName === "SELECT") { @@ -45,11 +73,7 @@ eventSender.keyDown("ArrowDown", ["altKey"]); } } - popupWindow = internals.pagePopupWindow; - if (typeof callback === "function" && popupWindow) - setPopupOpenCallback(callback); - else if (typeof errorCallback === "function" && !popupWindow) - errorCallback(); + return internals.pagePopupWindow; } function clickToOpenPicker(x, y, callback, errorCallback) {
diff --git a/third_party/blink/web_tests/fast/forms/resources/state-restore-dynamic-controls-frame.html b/third_party/blink/web_tests/fast/forms/resources/state-restore-dynamic-controls-frame.html index 3ec30e2..97bc453 100644 --- a/third_party/blink/web_tests/fast/forms/resources/state-restore-dynamic-controls-frame.html +++ b/third_party/blink/web_tests/fast/forms/resources/state-restore-dynamic-controls-frame.html
@@ -1,17 +1,30 @@ <!DOCTYPE html> <script> document.addEventListener('change', e => { - parent.inputOrChangeEvents.push('change/' + e.target.type); + parent.inputOrChangeEvents.push('change/' + e.target.id); }); document.addEventListener('input', e => { - parent.inputOrChangeEvents.push('input/' + e.target.type); + parent.inputOrChangeEvents.push('input/' + e.target.id); }); </script> <div></div> -<input type=checkbox disabled> -<input type=text disabled> -<textarea></textarea> -<select><option>1<option>2</select> +<input type=checkbox disabled id="checkbox-disabled"> +<input type=text disabled id="text-disabled"> +<input type=checkbox id="checkbox-unmodified"> +<input type=text id="text-unmodified"> +<input type=file id="file-modified"> +<input type=file id="file-unmodified"> +<input type=date id="date-modified"> +<input type=date id="date-unmodified"> +<textarea id="textarea-modified"></textarea> +<textarea id="textarea-unmodified">abc +def</textarea> +<select id="select-modified"><option>1<option>2</select> +<select id="select-unmodified" multiple> +<option selected>1</option> +<option>2</option> +<option selected>3</option> +</select> <script> -document.querySelector('div').innerHTML = '<input type=checkbox><input type=text>' +document.querySelector('div').innerHTML = '<input type=checkbox id="checkbox-modified"><input type=text id="text-modified">'; </script>
diff --git a/third_party/blink/web_tests/fast/forms/state-restore-dynamic-controls.html b/third_party/blink/web_tests/fast/forms/state-restore-dynamic-controls.html index 902e76d..6e7be469 100644 --- a/third_party/blink/web_tests/fast/forms/state-restore-dynamic-controls.html +++ b/third_party/blink/web_tests/fast/forms/state-restore-dynamic-controls.html
@@ -2,6 +2,17 @@ <script src="../../resources/testharness.js"></script> <script src="../../resources/testharnessreport.js"></script> <script src="../../external/wpt/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script> +<script src="file/resources/file-drag-common.js"></script> +<style> +/* Make the top-left corner of the iframe is equal to the top-left corner + of the body. It's required for dragFilesOntoInput(). */ +body { + margin: 0; +} +iframe { + border: none; +} +</style> <body> <iframe src="resources/state-restore-dynamic-controls-frame.html"></iframe> <script> @@ -16,14 +27,16 @@ container.firstChild.click(); container.lastChild.focus(); eventSender.keyDown('z'); - doc.querySelector('textarea').focus(); + dragFilesOntoInput(doc.querySelector('#file-modified'), ['foo.txt']); + doc.querySelector('#date-modified').value = '2020-01-08'; + doc.querySelector('#textarea-modified').focus(); eventSender.keyDown('y'); - doc.querySelector('select').focus(); + doc.querySelector('#select-modified').focus(); eventSender.keyDown('2'); assert_true(container.firstChild.checked, 'sanity check for a checkbox'); assert_equals(container.lastChild.value, 'z', 'sanity check for a text field'); - assert_equals(doc.querySelector('textarea').value, 'y', 'sanity check for a textarea'); - assert_equals(doc.querySelector('select').value, '2', 'sanity check for a select'); + assert_equals(doc.querySelector('#textarea-modified').value, 'y', 'sanity check for a textarea'); + assert_equals(doc.querySelector('#select-modified').value, '2', 'sanity check for a select'); // Flush asynchronous input/change events await timeOut(t, 0); @@ -50,7 +63,11 @@ // Wait for asynchronous input/change events await timeOut(t, 0); assert_array_equals(inputOrChangeEvents, [ - 'input/checkbox', 'change/checkbox', 'input/text', 'change/text', - 'input/textarea', 'change/textarea', 'input/select-one', 'change/select-one']); + 'input/file-modified', 'change/file-modified', + 'input/checkbox-modified', 'change/checkbox-modified', + 'input/text-modified', 'change/text-modified', + 'input/date-modified', 'change/date-modified', + 'input/textarea-modified', 'change/textarea-modified', + 'input/select-modified', 'change/select-modified']); }, 'Control states should be restored correctly even if controls were inserted before existing controls.'); </script>
diff --git a/third_party/blink/web_tests/fast/gradients/degenerate-stop-crash.html b/third_party/blink/web_tests/fast/gradients/degenerate-stop-crash.html new file mode 100644 index 0000000..c06a0076 --- /dev/null +++ b/third_party/blink/web_tests/fast/gradients/degenerate-stop-crash.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<title>Degenerate stop offset does not crash</title> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> + +<style> +div { + height: 600px; + width: 800px; + background-image: -webkit-radial-gradient(circle closest-side, + green, + red calc(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999% + 174px)); +} +</style> + +<div></div> + +<script> + test(() => {}); +</script>
diff --git a/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/smooth-scroll-snaps-visual-viewport.html b/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/smooth-scroll-snaps-visual-viewport.html index 111c15b6..eea38bc 100644 --- a/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/smooth-scroll-snaps-visual-viewport.html +++ b/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/smooth-scroll-snaps-visual-viewport.html
@@ -50,6 +50,12 @@ <div class="spacer" style="background-color: PaleGreen"></div> <div class="spacer" style="background-color: PaleGreen"></div> <div id="initial-snap-area"></div> + <!-- + Needed because otherwise the other snap-area's snap offset would get + clipped to the same offset as the initial snap area, which would make either + snap area a valid choice. + --> + <div style="height:10px;"></div> <div id="snap-area"></div> </div> @@ -86,7 +92,7 @@ assert_equals(window.internals.effectiveRootScroller(document), root_scroller, "#root-scroller must be the effective root scroller"); - // Should be snapped to the closer snap area (0,0) on the initial layout. + // Should be snapped to the closer snap area on the initial layout. assert_equals(visualViewport.offsetTop + root_scroller.scrollTop, initial_area.offsetTop);
diff --git a/third_party/blink/web_tests/fast/webgl/webgl-composite-modes-tabswitching.html b/third_party/blink/web_tests/fast/webgl/webgl-composite-modes-tabswitching.html index 8b5b1a2..7c3858a 100644 --- a/third_party/blink/web_tests/fast/webgl/webgl-composite-modes-tabswitching.html +++ b/third_party/blink/web_tests/fast/webgl/webgl-composite-modes-tabswitching.html
@@ -126,13 +126,13 @@ // Although page is hidden, WebGL must draw this frame. drawAll(30); - // TODO(crbug.com/919536): Ideally this should be wrapped in - // runAfterLayoutAndPaint() to ensure test coverage, but for now that will - // crash. - if (window.testRunner) { - testRunner.setPageVisibility("visible"); - } - runAfterLayoutAndPaint(repaintOnVisiblePage); + // runAfterLayoutAndPaint doesn't work when the page is invisible. + setTimeout(function() { + if (window.testRunner) { + testRunner.setPageVisibility("visible"); + } + runAfterLayoutAndPaint(repaintOnVisiblePage); + }, 0); } function runRepaintTest() {
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt deleted file mode 100644 index cba0c1e..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt +++ /dev/null
@@ -1,11603 +0,0 @@ -This test documents all interface attributes and methods on the global window object and element instances. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - -[INTERFACES] -interface AbortController - attribute @@toStringTag - getter signal - method abort - method constructor -interface AbortSignal : EventTarget - attribute @@toStringTag - getter aborted - getter onabort - method constructor - setter onabort -interface AbsoluteOrientationSensor : OrientationSensor - attribute @@toStringTag - method constructor -interface Accelerometer : Sensor - attribute @@toStringTag - getter x - getter y - getter z - method constructor -interface AccessibleNode : EventTarget - attribute @@toStringTag - getter activeDescendant - getter atomic - getter autocomplete - getter busy - getter checked - getter childNodes - getter colCount - getter colIndex - getter colSpan - getter controls - getter current - getter describedBy - getter details - getter disabled - getter errorMessage - getter expanded - getter flowTo - getter hasPopUp - getter hidden - getter invalid - getter keyShortcuts - getter label - getter labeledBy - getter level - getter live - getter modal - getter multiline - getter multiselectable - getter onaccessibleclick - getter onaccessiblecontextmenu - getter onaccessibledecrement - getter onaccessiblefocus - getter onaccessibleincrement - getter onaccessiblescrollintoview - getter orientation - getter owns - getter placeholder - getter posInSet - getter pressed - getter readOnly - getter relevant - getter required - getter role - getter roleDescription - getter rowCount - getter rowIndex - getter rowSpan - getter selected - getter setSize - getter sort - getter valueMax - getter valueMin - getter valueNow - getter valueText - method appendChild - method constructor - method removeChild - setter activeDescendant - setter atomic - setter autocomplete - setter busy - setter checked - setter colCount - setter colIndex - setter colSpan - setter controls - setter current - setter describedBy - setter details - setter disabled - setter errorMessage - setter expanded - setter flowTo - setter hasPopUp - setter hidden - setter invalid - setter keyShortcuts - setter label - setter labeledBy - setter level - setter live - setter modal - setter multiline - setter multiselectable - setter onaccessibleclick - setter onaccessiblecontextmenu - setter onaccessibledecrement - setter onaccessiblefocus - setter onaccessibleincrement - setter onaccessiblescrollintoview - setter orientation - setter owns - setter placeholder - setter posInSet - setter pressed - setter readOnly - setter relevant - setter required - setter role - setter roleDescription - setter rowCount - setter rowIndex - setter rowSpan - setter selected - setter setSize - setter sort - setter valueMax - setter valueMin - setter valueNow - setter valueText -interface AccessibleNodeList - attribute @@toStringTag - getter length - method @@iterator - method add - method constructor - method item - method remove - setter length -interface ActivateInvisibleEvent : Event - attribute @@toStringTag - getter activatedElement - method constructor -interface AmbientLightSensor : Sensor - attribute @@toStringTag - getter illuminance - method constructor -interface AnalyserNode : AudioNode - attribute @@toStringTag - getter fftSize - getter frequencyBinCount - getter maxDecibels - getter minDecibels - getter smoothingTimeConstant - method constructor - method getByteFrequencyData - method getByteTimeDomainData - method getFloatFrequencyData - method getFloatTimeDomainData - setter fftSize - setter maxDecibels - setter minDecibels - setter smoothingTimeConstant -interface Animation : EventTarget - attribute @@toStringTag - getter currentTime - getter effect - getter finished - getter id - getter oncancel - getter onfinish - getter pending - getter playState - getter playbackRate - getter ready - getter startTime - getter timeline - method cancel - method constructor - method finish - method pause - method play - method reverse - method updatePlaybackRate - setter currentTime - setter effect - setter id - setter oncancel - setter onfinish - setter playbackRate - setter startTime -interface AnimationEffect - attribute @@toStringTag - method constructor - method getComputedTiming - method getTiming - method updateTiming -interface AnimationEvent : Event - attribute @@toStringTag - getter animationName - getter elapsedTime - getter pseudoElement - method constructor -interface AnimationPlaybackEvent : Event - attribute @@toStringTag - getter currentTime - getter timelineTime - method constructor -interface AnimationTimeline - attribute @@toStringTag - getter currentTime - method constructor -interface ApplicationCache : EventTarget - attribute @@toStringTag - attribute CHECKING - attribute DOWNLOADING - attribute IDLE - attribute OBSOLETE - attribute UNCACHED - attribute UPDATEREADY - getter oncached - getter onchecking - getter ondownloading - getter onerror - getter onnoupdate - getter onobsolete - getter onprogress - getter onupdateready - getter status - method abort - method constructor - method swapCache - method update - setter oncached - setter onchecking - setter ondownloading - setter onerror - setter onnoupdate - setter onobsolete - setter onprogress - setter onupdateready -interface ApplicationCacheErrorEvent : Event - attribute @@toStringTag - getter message - getter reason - getter status - getter url - method constructor -interface Attr : Node - attribute @@toStringTag - getter localName - getter name - getter namespaceURI - getter ownerElement - getter prefix - getter specified - getter value - method constructor - setter value -interface Audio - attribute @@toStringTag - method constructor -interface AudioBuffer - attribute @@toStringTag - getter duration - getter length - getter numberOfChannels - getter sampleRate - method constructor - method copyFromChannel - method copyToChannel - method getChannelData -interface AudioBufferSourceNode : AudioScheduledSourceNode - attribute @@toStringTag - getter buffer - getter detune - getter loop - getter loopEnd - getter loopStart - getter playbackRate - method constructor - method start - setter buffer - setter loop - setter loopEnd - setter loopStart -interface AudioContext : BaseAudioContext - attribute @@toStringTag - getter baseLatency - method close - method constructor - method createMediaElementSource - method createMediaStreamDestination - method createMediaStreamSource - method getOutputTimestamp - method resume - method suspend -interface AudioDestinationNode : AudioNode - attribute @@toStringTag - getter maxChannelCount - method constructor -interface AudioListener - attribute @@toStringTag - getter forwardX - getter forwardY - getter forwardZ - getter positionX - getter positionY - getter positionZ - getter upX - getter upY - getter upZ - method constructor - method setOrientation - method setPosition -interface AudioNode : EventTarget - attribute @@toStringTag - getter channelCount - getter channelCountMode - getter channelInterpretation - getter context - getter numberOfInputs - getter numberOfOutputs - method connect - method constructor - method disconnect - setter channelCount - setter channelCountMode - setter channelInterpretation -interface AudioParam - attribute @@toStringTag - getter automationRate - getter defaultValue - getter maxValue - getter minValue - getter value - method cancelAndHoldAtTime - method cancelScheduledValues - method constructor - method exponentialRampToValueAtTime - method linearRampToValueAtTime - method setTargetAtTime - method setValueAtTime - method setValueCurveAtTime - setter automationRate - setter value -interface AudioParamMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface AudioProcessingEvent : Event - attribute @@toStringTag - getter inputBuffer - getter outputBuffer - getter playbackTime - method constructor -interface AudioScheduledSourceNode : AudioNode - attribute @@toStringTag - getter onended - method constructor - method start - method stop - setter onended -interface AudioTrack - attribute @@toStringTag - getter enabled - getter id - getter kind - getter label - getter language - getter sourceBuffer - method constructor - setter enabled -interface AudioTrackList : EventTarget - attribute @@toStringTag - getter length - getter onaddtrack - getter onchange - getter onremovetrack - method @@iterator - method constructor - method getTrackById - setter onaddtrack - setter onchange - setter onremovetrack -interface AudioWorklet : Worklet - attribute @@toStringTag - method constructor -interface AudioWorkletNode : AudioNode - attribute @@toStringTag - getter onprocessorerror - getter parameters - getter port - method constructor - setter onprocessorerror -interface AuthenticatorAssertionResponse : AuthenticatorResponse - attribute @@toStringTag - getter authenticatorData - getter signature - getter userHandle - method constructor -interface AuthenticatorAttestationResponse : AuthenticatorResponse - attribute @@toStringTag - getter attestationObject - method constructor - method getTransports -interface AuthenticatorResponse - attribute @@toStringTag - getter clientDataJSON - method constructor -interface BackgroundFetchManager - attribute @@toStringTag - method constructor - method fetch - method get - method getIds -interface BackgroundFetchRecord - attribute @@toStringTag - getter request - getter responseReady - method constructor -interface BackgroundFetchRegistration : EventTarget - attribute @@toStringTag - getter downloadTotal - getter downloaded - getter failureReason - getter id - getter onprogress - getter recordsAvailable - getter result - getter uploadTotal - getter uploaded - method abort - method constructor - method match - method matchAll - setter onprogress -interface BarProp - attribute @@toStringTag - getter visible - method constructor -interface BarcodeDetector - static method getSupportedFormats - attribute @@toStringTag - method constructor - method detect -interface BaseAudioContext : EventTarget - attribute @@toStringTag - getter audioWorklet - getter currentTime - getter destination - getter listener - getter onstatechange - getter sampleRate - getter state - method constructor - method createAnalyser - method createBiquadFilter - method createBuffer - method createBufferSource - method createChannelMerger - method createChannelSplitter - method createConstantSource - method createConvolver - method createDelay - method createDynamicsCompressor - method createGain - method createIIRFilter - method createOscillator - method createPanner - method createPeriodicWave - method createScriptProcessor - method createStereoPanner - method createWaveShaper - method decodeAudioData - setter onstatechange -interface BatteryManager : EventTarget - attribute @@toStringTag - getter charging - getter chargingTime - getter dischargingTime - getter level - getter onchargingchange - getter onchargingtimechange - getter ondischargingtimechange - getter onlevelchange - method constructor - setter onchargingchange - setter onchargingtimechange - setter ondischargingtimechange - setter onlevelchange -interface BeforeInstallPromptEvent : Event - attribute @@toStringTag - getter platforms - getter userChoice - method constructor - method prompt -interface BeforeUnloadEvent : Event - attribute @@toStringTag - getter returnValue - method constructor - setter returnValue -interface BiquadFilterNode : AudioNode - attribute @@toStringTag - getter Q - getter detune - getter frequency - getter gain - getter type - method constructor - method getFrequencyResponse - setter type -interface Blob - attribute @@toStringTag - getter size - getter type - method arrayBuffer - method constructor - method slice - method stream - method text -interface BlobEvent : Event - attribute @@toStringTag - getter data - getter timecode - method constructor -interface BluetoothAdvertisingEvent : Event - attribute @@toStringTag - getter appearance - getter device - getter manufacturerData - getter name - getter rssi - getter serviceData - getter txPower - getter uuids - method constructor -interface BluetoothLEScan - attribute @@toStringTag - getter acceptAllAdvertisements - getter active - getter filters - getter keepRepeatedDevices - method constructor - method stop -interface BluetoothManufacturerDataMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface BluetoothServiceDataMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface BroadcastChannel : EventTarget - attribute @@toStringTag - getter name - getter onmessage - getter onmessageerror - method close - method constructor - method postMessage - setter onmessage - setter onmessageerror -interface ByteLengthQueuingStrategy - attribute @@toStringTag - getter highWaterMark - getter size - method constructor -interface CDATASection : Text - attribute @@toStringTag - method constructor -interface CSS - static getter animationWorklet - static getter layoutWorklet - static getter paintWorklet - static method Hz - static method Q - static method ch - static method cm - static method deg - static method dpcm - static method dpi - static method dppx - static method em - static method escape - static method ex - static method fr - static method grad - static method in - static method kHz - static method mm - static method ms - static method number - static method pc - static method percent - static method pt - static method px - static method rad - static method registerProperty - static method rem - static method s - static method supports - static method turn - static method vh - static method vmax - static method vmin - static method vw - attribute @@toStringTag - method constructor -interface CSSAnimation : Animation - attribute @@toStringTag - getter animationName - method constructor -interface CSSConditionRule : CSSGroupingRule - attribute @@toStringTag - getter conditionText - method constructor -interface CSSFontFaceRule : CSSRule - attribute @@toStringTag - getter style - method constructor -interface CSSGroupingRule : CSSRule - attribute @@toStringTag - getter cssRules - method constructor - method deleteRule - method insertRule -interface CSSImageValue : CSSStyleValue - attribute @@toStringTag - method constructor -interface CSSImportRule : CSSRule - attribute @@toStringTag - getter href - getter media - getter styleSheet - method constructor - setter media -interface CSSKeyframeRule : CSSRule - attribute @@toStringTag - getter keyText - getter style - method constructor - setter keyText - setter style -interface CSSKeyframesRule : CSSRule - attribute @@toStringTag - getter cssRules - getter name - method appendRule - method constructor - method deleteRule - method findRule - setter name -interface CSSKeywordValue : CSSStyleValue - attribute @@toStringTag - getter value - method constructor - setter value -interface CSSMathInvert : CSSMathValue - attribute @@toStringTag - getter value - method constructor -interface CSSMathMax : CSSMathValue - attribute @@toStringTag - getter values - method constructor -interface CSSMathMin : CSSMathValue - attribute @@toStringTag - getter values - method constructor -interface CSSMathNegate : CSSMathValue - attribute @@toStringTag - getter value - method constructor -interface CSSMathProduct : CSSMathValue - attribute @@toStringTag - getter values - method constructor -interface CSSMathSum : CSSMathValue - attribute @@toStringTag - getter values - method constructor -interface CSSMathValue : CSSNumericValue - attribute @@toStringTag - getter operator - method constructor -interface CSSMatrixComponent : CSSTransformComponent - attribute @@toStringTag - getter matrix - method constructor - setter matrix -interface CSSMediaRule : CSSConditionRule - attribute @@toStringTag - getter media - method constructor - setter media -interface CSSNamespaceRule : CSSRule - attribute @@toStringTag - getter namespaceURI - getter prefix - method constructor -interface CSSNumericArray - attribute @@toStringTag - getter length - method @@iterator - method constructor - method entries - method forEach - method keys - method values -interface CSSNumericValue : CSSStyleValue - attribute @@toStringTag - method add - method constructor - method div - method equals - method max - method min - method mul - method sub - method to - method toSum - method type -interface CSSPageRule : CSSRule - attribute @@toStringTag - getter selectorText - getter style - method constructor - setter selectorText - setter style -interface CSSPerspective : CSSTransformComponent - attribute @@toStringTag - getter length - method constructor - setter length -interface CSSPositionValue : CSSStyleValue - attribute @@toStringTag - getter x - getter y - method constructor - setter x - setter y -interface CSSRotate : CSSTransformComponent - attribute @@toStringTag - getter angle - getter x - getter y - getter z - method constructor - setter angle - setter x - setter y - setter z -interface CSSRule - attribute @@toStringTag - attribute CHARSET_RULE - attribute FONT_FACE_RULE - attribute IMPORT_RULE - attribute KEYFRAMES_RULE - attribute KEYFRAME_RULE - attribute MEDIA_RULE - attribute NAMESPACE_RULE - attribute PAGE_RULE - attribute STYLE_RULE - attribute SUPPORTS_RULE - attribute VIEWPORT_RULE - getter cssText - getter parentRule - getter parentStyleSheet - getter type - method constructor - setter cssText -interface CSSRuleList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item -interface CSSScale : CSSTransformComponent - attribute @@toStringTag - getter x - getter y - getter z - method constructor - setter x - setter y - setter z -interface CSSSkew : CSSTransformComponent - attribute @@toStringTag - getter ax - getter ay - method constructor - setter ax - setter ay -interface CSSSkewX : CSSTransformComponent - attribute @@toStringTag - getter ax - method constructor - setter ax -interface CSSSkewY : CSSTransformComponent - attribute @@toStringTag - getter ay - method constructor - setter ay -interface CSSStyleDeclaration - attribute @@toStringTag - getter cssFloat - getter cssText - getter length - getter parentRule - method @@iterator - method constructor - method getPropertyPriority - method getPropertyValue - method item - method removeProperty - method setProperty - setter cssFloat - setter cssText -interface CSSStyleRule : CSSRule - attribute @@toStringTag - getter selectorText - getter style - getter styleMap - method constructor - setter selectorText - setter style -interface CSSStyleSheet : StyleSheet - attribute @@toStringTag - getter cssRules - getter ownerRule - getter rules - method addRule - method constructor - method deleteRule - method insertRule - method removeRule - method replace - method replaceSync -interface CSSStyleValue - static method parse - static method parseAll - attribute @@toStringTag - method constructor - method toString -interface CSSSupportsRule : CSSConditionRule - attribute @@toStringTag - method constructor -interface CSSTransformComponent - attribute @@toStringTag - getter is2D - method constructor - method toMatrix - method toString - setter is2D -interface CSSTransformValue : CSSStyleValue - attribute @@toStringTag - getter is2D - getter length - method @@iterator - method constructor - method entries - method forEach - method keys - method toMatrix - method values -interface CSSTransition : Animation - attribute @@toStringTag - getter transitionProperty - method constructor -interface CSSTranslate : CSSTransformComponent - attribute @@toStringTag - getter x - getter y - getter z - method constructor - setter x - setter y - setter z -interface CSSUnitValue : CSSNumericValue - attribute @@toStringTag - getter unit - getter value - method constructor - setter value -interface CSSUnparsedValue : CSSStyleValue - attribute @@toStringTag - getter length - method @@iterator - method constructor - method entries - method forEach - method keys - method values -interface CSSVariableReferenceValue - attribute @@toStringTag - getter fallback - getter variable - method constructor - setter variable -interface CSSViewportRule : CSSRule - attribute @@toStringTag - getter style - method constructor -interface Cache - attribute @@toStringTag - method add - method addAll - method constructor - method delete - method keys - method match - method matchAll - method put -interface CacheStorage - attribute @@toStringTag - method constructor - method delete - method has - method keys - method match - method open -interface CanvasCaptureMediaStreamTrack : MediaStreamTrack - attribute @@toStringTag - getter canvas - method constructor - method requestFrame -interface CanvasGradient - attribute @@toStringTag - method addColorStop - method constructor -interface CanvasPattern - attribute @@toStringTag - method constructor - method setTransform -interface CanvasRenderingContext2D - attribute @@toStringTag - getter canvas - getter direction - getter fillStyle - getter filter - getter font - getter globalAlpha - getter globalCompositeOperation - getter imageSmoothingEnabled - getter imageSmoothingQuality - getter lineCap - getter lineDashOffset - getter lineJoin - getter lineWidth - getter miterLimit - getter shadowBlur - getter shadowColor - getter shadowOffsetX - getter shadowOffsetY - getter strokeStyle - getter textAlign - getter textBaseline - method addHitRegion - method arc - method arcTo - method beginPath - method bezierCurveTo - method clearHitRegions - method clearRect - method clip - method closePath - method constructor - method createImageData - method createLinearGradient - method createPattern - method createRadialGradient - method drawFocusIfNeeded - method drawImage - method ellipse - method fill - method fillRect - method fillText - method getContextAttributes - method getImageData - method getLineDash - method getTransform - method isContextLost - method isPointInPath - method isPointInStroke - method lineTo - method measureText - method moveTo - method putImageData - method quadraticCurveTo - method rect - method removeHitRegion - method resetTransform - method restore - method rotate - method save - method scale - method scrollPathIntoView - method setLineDash - method setTransform - method stroke - method strokeRect - method strokeText - method transform - method translate - setter direction - setter fillStyle - setter filter - setter font - setter globalAlpha - setter globalCompositeOperation - setter imageSmoothingEnabled - setter imageSmoothingQuality - setter lineCap - setter lineDashOffset - setter lineJoin - setter lineWidth - setter miterLimit - setter shadowBlur - setter shadowColor - setter shadowOffsetX - setter shadowOffsetY - setter strokeStyle - setter textAlign - setter textBaseline -interface ChannelMergerNode : AudioNode - attribute @@toStringTag - method constructor -interface ChannelSplitterNode : AudioNode - attribute @@toStringTag - method constructor -interface CharacterData : Node - attribute @@toStringTag - attribute @@unscopables - getter data - getter length - getter nextElementSibling - getter previousElementSibling - method after - method appendData - method before - method constructor - method deleteData - method insertData - method remove - method replaceData - method replaceWith - method substringData - setter data -interface Clipboard : EventTarget - attribute @@toStringTag - method constructor - method read - method readText - method write - method writeText -interface ClipboardEvent : Event - attribute @@toStringTag - getter clipboardData - method constructor -interface ClipboardItem - attribute @@toStringTag - getter types - method constructor - method getType -interface CloseEvent : Event - attribute @@toStringTag - getter code - getter reason - getter wasClean - method constructor -interface Comment : CharacterData - attribute @@toStringTag - method constructor -interface CompositionEvent : UIEvent - attribute @@toStringTag - getter data - method constructor - method initCompositionEvent -interface CompressionStream - attribute @@toStringTag - getter readable - getter writable - method constructor -interface ComputedAccessibleNode - attribute @@toStringTag - getter atomic - getter autocomplete - getter busy - getter checked - getter colCount - getter colIndex - getter colSpan - getter disabled - getter expanded - getter firstChild - getter keyShortcuts - getter lastChild - getter level - getter modal - getter multiline - getter multiselectable - getter name - getter nextSibling - getter parent - getter placeholder - getter posInSet - getter previousSibling - getter readOnly - getter required - getter role - getter roleDescription - getter rowCount - getter rowIndex - getter rowSpan - getter selected - getter setSize - getter valueMax - getter valueMin - getter valueNow - getter valueText - method constructor - method ensureUpToDate -interface ConstantSourceNode : AudioScheduledSourceNode - attribute @@toStringTag - getter offset - method constructor -interface ContactAddress : PaymentAddress - attribute @@toStringTag - method constructor -interface ContactsManager - attribute @@toStringTag - method constructor - method getProperties - method select -interface ContentIndex - attribute @@toStringTag - method add - method constructor - method delete - method getAll -interface ConvolverNode : AudioNode - attribute @@toStringTag - getter buffer - getter normalize - method constructor - setter buffer - setter normalize -interface CookieChangeEvent : Event - attribute @@toStringTag - getter changed - getter deleted - method constructor -interface CookieStore : EventTarget - attribute @@toStringTag - getter onchange - method constructor - method delete - method get - method getAll - method set - setter onchange -interface CookieStoreManager - attribute @@toStringTag - method constructor - method getSubscriptions - method subscribe - method unsubscribe -interface CountQueuingStrategy - attribute @@toStringTag - getter highWaterMark - getter size - method constructor -interface Credential - attribute @@toStringTag - getter id - getter type - method constructor -interface CredentialsContainer - attribute @@toStringTag - method constructor - method create - method get - method preventSilentAccess - method store -interface Crypto - attribute @@toStringTag - getter subtle - method constructor - method getRandomValues -interface CryptoKey - attribute @@toStringTag - getter algorithm - getter extractable - getter type - getter usages - method constructor -interface CustomElementRegistry - attribute @@toStringTag - method constructor - method define - method get - method upgrade - method whenDefined -interface CustomEvent : Event - attribute @@toStringTag - getter detail - method constructor - method initCustomEvent -interface DOMError - attribute @@toStringTag - getter message - getter name - method constructor -interface DOMException - attribute @@toStringTag - attribute ABORT_ERR - attribute DATA_CLONE_ERR - attribute DOMSTRING_SIZE_ERR - attribute HIERARCHY_REQUEST_ERR - attribute INDEX_SIZE_ERR - attribute INUSE_ATTRIBUTE_ERR - attribute INVALID_ACCESS_ERR - attribute INVALID_CHARACTER_ERR - attribute INVALID_MODIFICATION_ERR - attribute INVALID_NODE_TYPE_ERR - attribute INVALID_STATE_ERR - attribute NAMESPACE_ERR - attribute NETWORK_ERR - attribute NOT_FOUND_ERR - attribute NOT_SUPPORTED_ERR - attribute NO_DATA_ALLOWED_ERR - attribute NO_MODIFICATION_ALLOWED_ERR - attribute QUOTA_EXCEEDED_ERR - attribute SECURITY_ERR - attribute SYNTAX_ERR - attribute TIMEOUT_ERR - attribute TYPE_MISMATCH_ERR - attribute URL_MISMATCH_ERR - attribute VALIDATION_ERR - attribute WRONG_DOCUMENT_ERR - getter code - getter message - getter name - method constructor -interface DOMImplementation - attribute @@toStringTag - method constructor - method createDocument - method createDocumentType - method createHTMLDocument - method hasFeature -interface DOMMatrix : DOMMatrixReadOnly - attribute @@toStringTag - getter a - getter b - getter c - getter d - getter e - getter f - getter m11 - getter m12 - getter m13 - getter m14 - getter m21 - getter m22 - getter m23 - getter m24 - getter m31 - getter m32 - getter m33 - getter m34 - getter m41 - getter m42 - getter m43 - getter m44 - method constructor - method invertSelf - method multiplySelf - method preMultiplySelf - method rotateAxisAngleSelf - method rotateFromVectorSelf - method rotateSelf - method scale3dSelf - method scaleSelf - method setMatrixValue - method skewXSelf - method skewYSelf - method translateSelf - setter a - setter b - setter c - setter d - setter e - setter f - setter m11 - setter m12 - setter m13 - setter m14 - setter m21 - setter m22 - setter m23 - setter m24 - setter m31 - setter m32 - setter m33 - setter m34 - setter m41 - setter m42 - setter m43 - setter m44 -interface DOMMatrixReadOnly - static method fromFloat32Array - static method fromFloat64Array - static method fromMatrix - attribute @@toStringTag - getter a - getter b - getter c - getter d - getter e - getter f - getter is2D - getter isIdentity - getter m11 - getter m12 - getter m13 - getter m14 - getter m21 - getter m22 - getter m23 - getter m24 - getter m31 - getter m32 - getter m33 - getter m34 - getter m41 - getter m42 - getter m43 - getter m44 - method constructor - method flipX - method flipY - method inverse - method multiply - method rotate - method rotateAxisAngle - method rotateFromVector - method scale - method scale3d - method scaleNonUniform - method skewX - method skewY - method toFloat32Array - method toFloat64Array - method toJSON - method toString - method transformPoint - method translate -interface DOMParser - attribute @@toStringTag - method constructor - method parseFromString -interface DOMPoint : DOMPointReadOnly - attribute @@toStringTag - getter w - getter x - getter y - getter z - method constructor - setter w - setter x - setter y - setter z -interface DOMPointReadOnly - static method fromPoint - attribute @@toStringTag - getter w - getter x - getter y - getter z - method constructor - method matrixTransform - method toJSON -interface DOMQuad - static method fromQuad - static method fromRect - attribute @@toStringTag - getter p1 - getter p2 - getter p3 - getter p4 - method constructor - method getBounds - method toJSON -interface DOMRect : DOMRectReadOnly - attribute @@toStringTag - getter height - getter width - getter x - getter y - method constructor - setter height - setter width - setter x - setter y -interface DOMRectList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item -interface DOMRectReadOnly - static method fromRect - attribute @@toStringTag - getter bottom - getter height - getter left - getter right - getter top - getter width - getter x - getter y - method constructor - method toJSON -interface DOMStringList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method contains - method item -interface DOMStringMap - attribute @@toStringTag - method constructor -interface DOMTokenList - attribute @@toStringTag - getter length - getter value - method @@iterator - method add - method constructor - method contains - method entries - method forEach - method item - method keys - method remove - method replace - method supports - method toString - method toggle - method values - setter value -interface DataTransfer - attribute @@toStringTag - getter dropEffect - getter effectAllowed - getter files - getter items - getter types - method clearData - method constructor - method getData - method setData - method setDragImage - setter dropEffect - setter effectAllowed -interface DataTransferItem - attribute @@toStringTag - getter kind - getter type - method constructor - method getAsFile - method getAsString - method webkitGetAsEntry -interface DataTransferItemList - attribute @@toStringTag - getter length - method @@iterator - method add - method clear - method constructor - method remove -interface DecompressionStream - attribute @@toStringTag - getter readable - getter writable - method constructor -interface DelayNode : AudioNode - attribute @@toStringTag - getter delayTime - method constructor -interface DetectedBarcode - attribute @@toStringTag - getter boundingBox - getter cornerPoints - getter format - getter rawValue - method constructor -interface DetectedFace - attribute @@toStringTag - getter boundingBox - getter landmarks - method constructor -interface DetectedText - attribute @@toStringTag - getter boundingBox - getter cornerPoints - getter rawValue - method constructor -interface DeviceMotionEvent : Event - attribute @@toStringTag - getter acceleration - getter accelerationIncludingGravity - getter interval - getter rotationRate - method constructor -interface DeviceMotionEventAcceleration - attribute @@toStringTag - getter x - getter y - getter z - method constructor -interface DeviceMotionEventRotationRate - attribute @@toStringTag - getter alpha - getter beta - getter gamma - method constructor -interface DeviceOrientationEvent : Event - attribute @@toStringTag - getter absolute - getter alpha - getter beta - getter gamma - method constructor -interface Document : Node - attribute @@toStringTag - attribute @@unscopables - getter URL - getter activeElement - getter addressSpace - getter adoptedStyleSheets - getter alinkColor - getter all - getter anchors - getter applets - getter bgColor - getter body - getter characterSet - getter charset - getter childElementCount - getter children - getter compatMode - getter contentType - getter cookie - getter currentScript - getter defaultView - getter designMode - getter dir - getter doctype - getter documentElement - getter documentURI - getter domain - getter embeds - getter featurePolicy - getter fgColor - getter firstElementChild - getter fonts - getter forms - getter fullscreen - getter fullscreenElement - getter fullscreenEnabled - getter head - getter hidden - getter images - getter implementation - getter inputEncoding - getter lastElementChild - getter lastModified - getter linkColor - getter links - getter onabort - getter onactivateinvisible - getter onanimationend - getter onanimationiteration - getter onanimationstart - getter onauxclick - getter onbeforecopy - getter onbeforecut - getter onbeforepaste - getter onblur - getter oncancel - getter oncanplay - getter oncanplaythrough - getter onchange - getter onclick - getter onclose - getter oncontextmenu - getter oncopy - getter oncuechange - getter oncut - getter ondblclick - getter ondrag - getter ondragend - getter ondragenter - getter ondragleave - getter ondragover - getter ondragstart - getter ondrop - getter ondurationchange - getter onemptied - getter onended - getter onerror - getter onfocus - getter onformdata - getter onfreeze - getter onfullscreenchange - getter onfullscreenerror - getter ongotpointercapture - getter oninput - getter oninvalid - getter onkeydown - getter onkeypress - getter onkeyup - getter onload - getter onloadeddata - getter onloadedmetadata - getter onloadstart - getter onlostpointercapture - getter onmousedown - getter onmouseenter - getter onmouseleave - getter onmousemove - getter onmouseout - getter onmouseover - getter onmouseup - getter onmousewheel - getter onoverscroll - getter onpaste - getter onpause - getter onplay - getter onplaying - getter onpointercancel - getter onpointerdown - getter onpointerenter - getter onpointerleave - getter onpointerlockchange - getter onpointerlockerror - getter onpointermove - getter onpointerout - getter onpointerover - getter onpointerrawupdate - getter onpointerup - getter onprogress - getter onratechange - getter onreadystatechange - getter onrendersubtreeactivation - getter onreset - getter onresize - getter onresume - getter onscroll - getter onscrollend - getter onsearch - getter onsecuritypolicyviolation - getter onseeked - getter onseeking - getter onselect - getter onselectionchange - getter onselectstart - getter onstalled - getter onsubmit - getter onsuspend - getter ontimeupdate - getter ontoggle - getter ontouchcancel - getter ontouchend - getter ontouchmove - getter ontouchstart - getter ontransitionend - getter onvisibilitychange - getter onvolumechange - getter onwaiting - getter onwebkitfullscreenchange - getter onwebkitfullscreenerror - getter onwheel - getter pictureInPictureElement - getter pictureInPictureEnabled - getter plugins - getter pointerLockElement - getter readyState - getter referrer - getter rootElement - getter rootScroller - getter scripts - getter scrollingElement - getter styleSheets - getter timeline - getter title - getter visibilityState - getter vlinkColor - getter wasDiscarded - getter webkitCurrentFullScreenElement - getter webkitFullscreenElement - getter webkitFullscreenEnabled - getter webkitHidden - getter webkitIsFullScreen - getter webkitVisibilityState - getter xmlEncoding - getter xmlStandalone - getter xmlVersion - method adoptNode - method append - method captureEvents - method caretRangeFromPoint - method clear - method close - method constructor - method createAttribute - method createAttributeNS - method createCDATASection - method createComment - method createDocumentFragment - method createElement - method createElementNS - method createEvent - method createExpression - method createNSResolver - method createNodeIterator - method createProcessingInstruction - method createRange - method createTextNode - method createTreeWalker - method elementFromPoint - method elementsFromPoint - method evaluate - method execCommand - method exitFullscreen - method exitPictureInPicture - method exitPointerLock - method getAnimations - method getElementById - method getElementsByClassName - method getElementsByName - method getElementsByTagName - method getElementsByTagNameNS - method getSelection - method hasFocus - method hasStorageAccess - method importNode - method open - method prepend - method queryCommandEnabled - method queryCommandIndeterm - method queryCommandState - method queryCommandSupported - method queryCommandValue - method querySelector - method querySelectorAll - method registerElement - method releaseEvents - method requestStorageAccess - method webkitCancelFullScreen - method webkitExitFullscreen - method write - method writeln - setter adoptedStyleSheets - setter alinkColor - setter bgColor - setter body - setter cookie - setter designMode - setter dir - setter domain - setter fgColor - setter fullscreen - setter fullscreenElement - setter fullscreenEnabled - setter linkColor - setter onabort - setter onactivateinvisible - setter onanimationend - setter onanimationiteration - setter onanimationstart - setter onauxclick - setter onbeforecopy - setter onbeforecut - setter onbeforepaste - setter onblur - setter oncancel - setter oncanplay - setter oncanplaythrough - setter onchange - setter onclick - setter onclose - setter oncontextmenu - setter oncopy - setter oncuechange - setter oncut - setter ondblclick - setter ondrag - setter ondragend - setter ondragenter - setter ondragleave - setter ondragover - setter ondragstart - setter ondrop - setter ondurationchange - setter onemptied - setter onended - setter onerror - setter onfocus - setter onformdata - setter onfreeze - setter onfullscreenchange - setter onfullscreenerror - setter ongotpointercapture - setter oninput - setter oninvalid - setter onkeydown - setter onkeypress - setter onkeyup - setter onload - setter onloadeddata - setter onloadedmetadata - setter onloadstart - setter onlostpointercapture - setter onmousedown - setter onmouseenter - setter onmouseleave - setter onmousemove - setter onmouseout - setter onmouseover - setter onmouseup - setter onmousewheel - setter onoverscroll - setter onpaste - setter onpause - setter onplay - setter onplaying - setter onpointercancel - setter onpointerdown - setter onpointerenter - setter onpointerleave - setter onpointerlockchange - setter onpointerlockerror - setter onpointermove - setter onpointerout - setter onpointerover - setter onpointerrawupdate - setter onpointerup - setter onprogress - setter onratechange - setter onreadystatechange - setter onrendersubtreeactivation - setter onreset - setter onresize - setter onresume - setter onscroll - setter onscrollend - setter onsearch - setter onsecuritypolicyviolation - setter onseeked - setter onseeking - setter onselect - setter onselectionchange - setter onselectstart - setter onstalled - setter onsubmit - setter onsuspend - setter ontimeupdate - setter ontoggle - setter ontouchcancel - setter ontouchend - setter ontouchmove - setter ontouchstart - setter ontransitionend - setter onvisibilitychange - setter onvolumechange - setter onwaiting - setter onwebkitfullscreenchange - setter onwebkitfullscreenerror - setter onwheel - setter rootScroller - setter title - setter vlinkColor - setter xmlStandalone - setter xmlVersion -interface DocumentFragment : Node - attribute @@toStringTag - attribute @@unscopables - getter childElementCount - getter children - getter firstElementChild - getter lastElementChild - method append - method constructor - method getElementById - method prepend - method querySelector - method querySelectorAll -interface DocumentTimeline : AnimationTimeline - attribute @@toStringTag - method constructor -interface DocumentType : Node - attribute @@toStringTag - attribute @@unscopables - getter name - getter publicId - getter systemId - method after - method before - method constructor - method remove - method replaceWith -interface DragEvent : MouseEvent - attribute @@toStringTag - getter dataTransfer - method constructor -interface DynamicsCompressorNode : AudioNode - attribute @@toStringTag - getter attack - getter knee - getter ratio - getter reduction - getter release - getter threshold - method constructor -interface EditContext : EventTarget - attribute @@toStringTag - getter enterKeyHint - getter inputMode - getter inputPanelPolicy - getter oncompositionend - getter oncompositionstart - getter ontextformatupdate - getter ontextupdate - getter selectionEnd - getter selectionStart - getter text - method blur - method constructor - method focus - method updateLayout - method updateSelection - method updateText - setter enterKeyHint - setter inputMode - setter inputPanelPolicy - setter oncompositionend - setter oncompositionstart - setter ontextformatupdate - setter ontextupdate - setter selectionEnd - setter selectionStart - setter text -interface Element : Node - attribute @@toStringTag - attribute @@unscopables - getter accessibleNode - getter ariaActiveDescendantElement - getter ariaAtomic - getter ariaAutoComplete - getter ariaBusy - getter ariaChecked - getter ariaColCount - getter ariaColIndex - getter ariaColSpan - getter ariaControlsElements - getter ariaCurrent - getter ariaDescribedByElements - getter ariaDetailsElement - getter ariaDisabled - getter ariaErrorMessageElement - getter ariaExpanded - getter ariaFlowToElements - getter ariaHasPopup - getter ariaHidden - getter ariaKeyShortcuts - getter ariaLabel - getter ariaLabelledByElements - getter ariaLevel - getter ariaLive - getter ariaModal - getter ariaMultiLine - getter ariaMultiSelectable - getter ariaOrientation - getter ariaOwnsElements - getter ariaPlaceholder - getter ariaPosInSet - getter ariaPressed - getter ariaReadOnly - getter ariaRelevant - getter ariaRequired - getter ariaRoleDescription - getter ariaRowCount - getter ariaRowIndex - getter ariaRowSpan - getter ariaSelected - getter ariaSort - getter ariaValueMax - getter ariaValueMin - getter ariaValueNow - getter ariaValueText - getter assignedSlot - getter attributeStyleMap - getter attributes - getter childElementCount - getter children - getter classList - getter className - getter clientHeight - getter clientLeft - getter clientTop - getter clientWidth - getter computedName - getter computedRole - getter elementTiming - getter firstElementChild - getter id - getter innerHTML - getter invisible - getter lastElementChild - getter localName - getter namespaceURI - getter nextElementSibling - getter onbeforecopy - getter onbeforecut - getter onbeforepaste - getter onfullscreenchange - getter onfullscreenerror - getter onsearch - getter onwebkitfullscreenchange - getter onwebkitfullscreenerror - getter outerHTML - getter part - getter prefix - getter previousElementSibling - getter renderSubtree - getter role - getter scrollHeight - getter scrollLeft - getter scrollTop - getter scrollWidth - getter shadowRoot - getter slot - getter tagName - method after - method animate - method append - method attachShadow - method before - method closest - method computedStyleMap - method constructor - method createShadowRoot - method getAnimations - method getAttribute - method getAttributeNS - method getAttributeNames - method getAttributeNode - method getAttributeNodeNS - method getBoundingClientRect - method getClientRects - method getDestinationInsertionPoints - method getElementsByClassName - method getElementsByTagName - method getElementsByTagNameNS - method hasAttribute - method hasAttributeNS - method hasAttributes - method hasPointerCapture - method insertAdjacentElement - method insertAdjacentHTML - method insertAdjacentText - method matches - method prepend - method querySelector - method querySelectorAll - method releasePointerCapture - method remove - method removeAttribute - method removeAttributeNS - method removeAttributeNode - method replaceWith - method requestFullscreen - method requestPointerLock - method resetSubtreeRendered - method scroll - method scrollBy - method scrollIntoView - method scrollIntoViewIfNeeded - method scrollTo - method setAttribute - method setAttributeNS - method setAttributeNode - method setAttributeNodeNS - method setPointerCapture - method toggleAttribute - method updateRendering - method webkitMatchesSelector - method webkitRequestFullScreen - method webkitRequestFullscreen - setter ariaActiveDescendantElement - setter ariaAtomic - setter ariaAutoComplete - setter ariaBusy - setter ariaChecked - setter ariaColCount - setter ariaColIndex - setter ariaColSpan - setter ariaControlsElements - setter ariaCurrent - setter ariaDescribedByElements - setter ariaDetailsElement - setter ariaDisabled - setter ariaErrorMessageElement - setter ariaExpanded - setter ariaFlowToElements - setter ariaHasPopup - setter ariaHidden - setter ariaKeyShortcuts - setter ariaLabel - setter ariaLabelledByElements - setter ariaLevel - setter ariaLive - setter ariaModal - setter ariaMultiLine - setter ariaMultiSelectable - setter ariaOrientation - setter ariaOwnsElements - setter ariaPlaceholder - setter ariaPosInSet - setter ariaPressed - setter ariaReadOnly - setter ariaRelevant - setter ariaRequired - setter ariaRoleDescription - setter ariaRowCount - setter ariaRowIndex - setter ariaRowSpan - setter ariaSelected - setter ariaSort - setter ariaValueMax - setter ariaValueMin - setter ariaValueNow - setter ariaValueText - setter classList - setter className - setter elementTiming - setter id - setter innerHTML - setter invisible - setter onbeforecopy - setter onbeforecut - setter onbeforepaste - setter onfullscreenchange - setter onfullscreenerror - setter onsearch - setter onwebkitfullscreenchange - setter onwebkitfullscreenerror - setter outerHTML - setter part - setter renderSubtree - setter role - setter scrollLeft - setter scrollTop - setter slot -interface ElementInternals - attribute @@toStringTag - getter ariaActiveDescendantElement - getter ariaAtomic - getter ariaAutoComplete - getter ariaBusy - getter ariaChecked - getter ariaColCount - getter ariaColIndex - getter ariaColSpan - getter ariaControlsElements - getter ariaCurrent - getter ariaDescribedByElements - getter ariaDetailsElement - getter ariaDisabled - getter ariaErrorMessageElement - getter ariaExpanded - getter ariaFlowToElements - getter ariaHasPopup - getter ariaHidden - getter ariaKeyShortcuts - getter ariaLabel - getter ariaLabelledByElements - getter ariaLevel - getter ariaLive - getter ariaModal - getter ariaMultiLine - getter ariaMultiSelectable - getter ariaOrientation - getter ariaOwnsElements - getter ariaPlaceholder - getter ariaPosInSet - getter ariaPressed - getter ariaReadOnly - getter ariaRelevant - getter ariaRequired - getter ariaRoleDescription - getter ariaRowCount - getter ariaRowIndex - getter ariaRowSpan - getter ariaSelected - getter ariaSort - getter ariaValueMax - getter ariaValueMin - getter ariaValueNow - getter ariaValueText - getter form - getter labels - getter role - getter states - getter validationMessage - getter validity - getter willValidate - method checkValidity - method constructor - method reportValidity - method setFormValue - method setValidity - setter ariaActiveDescendantElement - setter ariaAtomic - setter ariaAutoComplete - setter ariaBusy - setter ariaChecked - setter ariaColCount - setter ariaColIndex - setter ariaColSpan - setter ariaControlsElements - setter ariaCurrent - setter ariaDescribedByElements - setter ariaDetailsElement - setter ariaDisabled - setter ariaErrorMessageElement - setter ariaExpanded - setter ariaFlowToElements - setter ariaHasPopup - setter ariaHidden - setter ariaKeyShortcuts - setter ariaLabel - setter ariaLabelledByElements - setter ariaLevel - setter ariaLive - setter ariaModal - setter ariaMultiLine - setter ariaMultiSelectable - setter ariaOrientation - setter ariaOwnsElements - setter ariaPlaceholder - setter ariaPosInSet - setter ariaPressed - setter ariaReadOnly - setter ariaRelevant - setter ariaRequired - setter ariaRoleDescription - setter ariaRowCount - setter ariaRowIndex - setter ariaRowSpan - setter ariaSelected - setter ariaSort - setter ariaValueMax - setter ariaValueMin - setter ariaValueNow - setter ariaValueText - setter role -interface EnterPictureInPictureEvent : Event - attribute @@toStringTag - getter pictureInPictureWindow - method constructor -interface ErrorEvent : Event - attribute @@toStringTag - getter colno - getter error - getter filename - getter lineno - getter message - method constructor -interface Event - attribute @@toStringTag - attribute AT_TARGET - attribute BUBBLING_PHASE - attribute CAPTURING_PHASE - attribute NONE - getter bubbles - getter cancelBubble - getter cancelable - getter composed - getter currentTarget - getter defaultPrevented - getter eventPhase - getter path - getter returnValue - getter srcElement - getter target - getter timeStamp - getter type - method composedPath - method constructor - method initEvent - method preventDefault - method stopImmediatePropagation - method stopPropagation - setter cancelBubble - setter returnValue -interface EventSource : EventTarget - attribute @@toStringTag - attribute CLOSED - attribute CONNECTING - attribute OPEN - getter onerror - getter onmessage - getter onopen - getter readyState - getter url - getter withCredentials - method close - method constructor - setter onerror - setter onmessage - setter onopen -interface EventTarget - attribute @@toStringTag - method addEventListener - method constructor - method dispatchEvent - method removeEventListener -interface External - attribute @@toStringTag - method AddSearchProvider - method IsSearchProviderInstalled - method constructor -interface FaceDetector - attribute @@toStringTag - method constructor - method detect -interface FeaturePolicy - attribute @@toStringTag - method allowedFeatures - method allowsFeature - method constructor - method features - method getAllowlistForFeature -interface FederatedCredential : Credential - attribute @@toStringTag - getter iconURL - getter name - getter protocol - getter provider - method constructor -interface File : Blob - attribute @@toStringTag - getter lastModified - getter lastModifiedDate - getter name - getter webkitRelativePath - method constructor -interface FileList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item -interface FileReader : EventTarget - attribute @@toStringTag - attribute DONE - attribute EMPTY - attribute LOADING - getter error - getter onabort - getter onerror - getter onload - getter onloadend - getter onloadstart - getter onprogress - getter readyState - getter result - method abort - method constructor - method readAsArrayBuffer - method readAsBinaryString - method readAsDataURL - method readAsText - setter onabort - setter onerror - setter onload - setter onloadend - setter onloadstart - setter onprogress -interface FileSystemDirectoryHandle : FileSystemHandle - static method getSystemDirectory - attribute @@toStringTag - method constructor - method getDirectory - method getEntries - method getFile - method removeEntry -interface FileSystemFileHandle : FileSystemHandle - attribute @@toStringTag - method constructor - method createWriter - method getFile -interface FileSystemHandle - attribute @@toStringTag - getter isDirectory - getter isFile - getter name - method constructor - method queryPermission - method requestPermission -interface FileSystemWriter - attribute @@toStringTag - method close - method constructor - method truncate - method write -interface FocusEvent : UIEvent - attribute @@toStringTag - getter relatedTarget - method constructor -interface FontFace - attribute @@toStringTag - getter display - getter family - getter featureSettings - getter loaded - getter status - getter stretch - getter style - getter unicodeRange - getter variant - getter weight - method constructor - method load - setter display - setter family - setter featureSettings - setter stretch - setter style - setter unicodeRange - setter variant - setter weight -interface FontFaceSetLoadEvent : Event - attribute @@toStringTag - getter fontfaces - method constructor -interface FormData - attribute @@toStringTag - method @@iterator - method append - method constructor - method delete - method entries - method forEach - method get - method getAll - method has - method keys - method set - method values -interface FormDataEvent : Event - attribute @@toStringTag - getter formData - method constructor -interface GainNode : AudioNode - attribute @@toStringTag - getter gain - method constructor -interface Gamepad - attribute @@toStringTag - getter axes - getter buttons - getter connected - getter id - getter index - getter mapping - getter timestamp - getter vibrationActuator - method constructor -interface GamepadAxisEvent : GamepadEvent - attribute @@toStringTag - getter axis - getter value - method constructor -interface GamepadButton - attribute @@toStringTag - getter pressed - getter touched - getter value - method constructor -interface GamepadButtonEvent : GamepadEvent - attribute @@toStringTag - getter button - getter value - method constructor -interface GamepadEvent : Event - attribute @@toStringTag - getter gamepad - method constructor -interface GamepadHapticActuator - attribute @@toStringTag - getter type - method constructor - method playEffect - method reset -interface Geolocation - attribute @@toStringTag - method clearWatch - method constructor - method getCurrentPosition - method watchPosition -interface GeolocationCoordinates - attribute @@toStringTag - getter accuracy - getter altitude - getter altitudeAccuracy - getter heading - getter latitude - getter longitude - getter speed - method constructor -interface GeolocationPosition - attribute @@toStringTag - getter coords - getter timestamp - method constructor -interface GeolocationPositionError - attribute @@toStringTag - attribute PERMISSION_DENIED - attribute POSITION_UNAVAILABLE - attribute TIMEOUT - getter code - getter message - method constructor -interface Gyroscope : Sensor - attribute @@toStringTag - getter x - getter y - getter z - method constructor -interface HID : EventTarget - attribute @@toStringTag - getter onconnect - getter ondisconnect - method constructor - method getDevices - method requestDevice - setter onconnect - setter ondisconnect -interface HIDCollectionInfo - attribute @@toStringTag - getter children - getter featureReports - getter inputReports - getter outputReports - getter usage - getter usagePage - method constructor -interface HIDConnectionEvent : Event - attribute @@toStringTag - getter device - method constructor -interface HIDDevice : EventTarget - attribute @@toStringTag - getter collections - getter oninputreport - getter opened - getter productId - getter productName - getter vendorId - method close - method constructor - method open - method receiveFeatureReport - method sendFeatureReport - method sendReport - setter oninputreport -interface HIDInputReportEvent : Event - attribute @@toStringTag - getter data - getter device - getter reportId - method constructor -interface HIDReportInfo - attribute @@toStringTag - getter items - getter reportId - method constructor -interface HIDReportItem - attribute @@toStringTag - getter hasNull - getter isAbsolute - getter isArray - getter isRange - getter logicalMaximum - getter logicalMinimum - getter physicalMaximum - getter physicalMinimum - getter reportCount - getter reportSize - getter strings - getter unitExponent - getter unitFactorCurrentExponent - getter unitFactorLengthExponent - getter unitFactorLuminousIntensityExponent - getter unitFactorMassExponent - getter unitFactorTemperatureExponent - getter unitFactorTimeExponent - getter unitSystem - getter usageMaximum - getter usageMinimum - getter usages - method constructor -interface HTMLAllCollection - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item - method namedItem -interface HTMLAnchorElement : HTMLElement - attribute @@toStringTag - getter charset - getter coords - getter download - getter hash - getter host - getter hostname - getter href - getter hrefTranslate - getter hreflang - getter name - getter origin - getter password - getter pathname - getter ping - getter port - getter protocol - getter referrerPolicy - getter rel - getter relList - getter rev - getter search - getter shape - getter target - getter text - getter type - getter username - method constructor - method toString - setter charset - setter coords - setter download - setter hash - setter host - setter hostname - setter href - setter hrefTranslate - setter hreflang - setter name - setter password - setter pathname - setter ping - setter port - setter protocol - setter referrerPolicy - setter rel - setter relList - setter rev - setter search - setter shape - setter target - setter text - setter type - setter username -interface HTMLAreaElement : HTMLElement - attribute @@toStringTag - getter alt - getter coords - getter download - getter hash - getter host - getter hostname - getter href - getter noHref - getter origin - getter password - getter pathname - getter ping - getter port - getter protocol - getter referrerPolicy - getter rel - getter relList - getter search - getter shape - getter target - getter username - method constructor - method toString - setter alt - setter coords - setter download - setter hash - setter host - setter hostname - setter href - setter noHref - setter password - setter pathname - setter ping - setter port - setter protocol - setter referrerPolicy - setter rel - setter relList - setter search - setter shape - setter target - setter username -interface HTMLAudioElement : HTMLMediaElement - attribute @@toStringTag - method constructor -interface HTMLBRElement : HTMLElement - attribute @@toStringTag - getter clear - method constructor - setter clear -interface HTMLBaseElement : HTMLElement - attribute @@toStringTag - getter href - getter target - method constructor - setter href - setter target -interface HTMLBodyElement : HTMLElement - attribute @@toStringTag - getter aLink - getter background - getter bgColor - getter link - getter onafterprint - getter onbeforeprint - getter onbeforeunload - getter onblur - getter onerror - getter onfocus - getter onhashchange - getter onlanguagechange - getter onload - getter onmessage - getter onmessageerror - getter onoffline - getter ononline - getter onpagehide - getter onpageshow - getter onpopstate - getter onportalactivate - getter onrejectionhandled - getter onresize - getter onscroll - getter onstorage - getter onunhandledrejection - getter onunload - getter text - getter vLink - method constructor - setter aLink - setter background - setter bgColor - setter link - setter onafterprint - setter onbeforeprint - setter onbeforeunload - setter onblur - setter onerror - setter onfocus - setter onhashchange - setter onlanguagechange - setter onload - setter onmessage - setter onmessageerror - setter onoffline - setter ononline - setter onpagehide - setter onpageshow - setter onpopstate - setter onportalactivate - setter onrejectionhandled - setter onresize - setter onscroll - setter onstorage - setter onunhandledrejection - setter onunload - setter text - setter vLink -interface HTMLButtonElement : HTMLElement - attribute @@toStringTag - getter disabled - getter form - getter formAction - getter formEnctype - getter formMethod - getter formNoValidate - getter formTarget - getter labels - getter name - getter type - getter validationMessage - getter validity - getter value - getter willValidate - method checkValidity - method constructor - method reportValidity - method setCustomValidity - setter disabled - setter formAction - setter formEnctype - setter formMethod - setter formNoValidate - setter formTarget - setter name - setter type - setter value -interface HTMLCanvasElement : HTMLElement - attribute @@toStringTag - getter height - getter width - method captureStream - method constructor - method convertToBlob - method getContext - method toBlob - method toDataURL - method transferControlToOffscreen - setter height - setter width -interface HTMLCollection - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item - method namedItem -interface HTMLContentElement : HTMLElement - attribute @@toStringTag - getter select - method constructor - method getDistributedNodes - setter select -interface HTMLDListElement : HTMLElement - attribute @@toStringTag - getter compact - method constructor - setter compact -interface HTMLDataElement : HTMLElement - attribute @@toStringTag - getter value - method constructor - setter value -interface HTMLDataListElement : HTMLElement - attribute @@toStringTag - getter options - method constructor -interface HTMLDetailsElement : HTMLElement - attribute @@toStringTag - getter open - method constructor - setter open -interface HTMLDialogElement : HTMLElement - attribute @@toStringTag - getter open - getter returnValue - method close - method constructor - method show - method showModal - setter open - setter returnValue -interface HTMLDirectoryElement : HTMLElement - attribute @@toStringTag - getter compact - method constructor - setter compact -interface HTMLDivElement : HTMLElement - attribute @@toStringTag - getter align - method constructor - setter align -interface HTMLDocument : Document - attribute @@toStringTag - method constructor -interface HTMLElement : Element - attribute @@toStringTag - getter accessKey - getter autocapitalize - getter autofocus - getter contentEditable - getter dataset - getter dir - getter draggable - getter enterKeyHint - getter hidden - getter inert - getter innerText - getter inputMode - getter isContentEditable - getter lang - getter nonce - getter offsetHeight - getter offsetLeft - getter offsetParent - getter offsetTop - getter offsetWidth - getter onabort - getter onactivateinvisible - getter onanimationend - getter onanimationiteration - getter onanimationstart - getter onauxclick - getter onblur - getter oncancel - getter oncanplay - getter oncanplaythrough - getter onchange - getter onclick - getter onclose - getter oncontextmenu - getter oncopy - getter oncuechange - getter oncut - getter ondblclick - getter ondrag - getter ondragend - getter ondragenter - getter ondragleave - getter ondragover - getter ondragstart - getter ondrop - getter ondurationchange - getter onemptied - getter onended - getter onerror - getter onfocus - getter onformdata - getter ongotpointercapture - getter oninput - getter oninvalid - getter onkeydown - getter onkeypress - getter onkeyup - getter onload - getter onloadeddata - getter onloadedmetadata - getter onloadstart - getter onlostpointercapture - getter onmousedown - getter onmouseenter - getter onmouseleave - getter onmousemove - getter onmouseout - getter onmouseover - getter onmouseup - getter onmousewheel - getter onoverscroll - getter onpaste - getter onpause - getter onplay - getter onplaying - getter onpointercancel - getter onpointerdown - getter onpointerenter - getter onpointerleave - getter onpointermove - getter onpointerout - getter onpointerover - getter onpointerrawupdate - getter onpointerup - getter onprogress - getter onratechange - getter onrendersubtreeactivation - getter onreset - getter onresize - getter onscroll - getter onscrollend - getter onseeked - getter onseeking - getter onselect - getter onselectionchange - getter onselectstart - getter onstalled - getter onsubmit - getter onsuspend - getter ontimeupdate - getter ontoggle - getter ontouchcancel - getter ontouchend - getter ontouchmove - getter ontouchstart - getter ontransitionend - getter onvolumechange - getter onwaiting - getter onwheel - getter outerText - getter spellcheck - getter style - getter tabIndex - getter title - getter translate - method attachInternals - method blur - method click - method constructor - method focus - setter accessKey - setter autocapitalize - setter autofocus - setter contentEditable - setter dir - setter draggable - setter enterKeyHint - setter hidden - setter inert - setter innerText - setter inputMode - setter lang - setter nonce - setter onabort - setter onactivateinvisible - setter onanimationend - setter onanimationiteration - setter onanimationstart - setter onauxclick - setter onblur - setter oncancel - setter oncanplay - setter oncanplaythrough - setter onchange - setter onclick - setter onclose - setter oncontextmenu - setter oncopy - setter oncuechange - setter oncut - setter ondblclick - setter ondrag - setter ondragend - setter ondragenter - setter ondragleave - setter ondragover - setter ondragstart - setter ondrop - setter ondurationchange - setter onemptied - setter onended - setter onerror - setter onfocus - setter onformdata - setter ongotpointercapture - setter oninput - setter oninvalid - setter onkeydown - setter onkeypress - setter onkeyup - setter onload - setter onloadeddata - setter onloadedmetadata - setter onloadstart - setter onlostpointercapture - setter onmousedown - setter onmouseenter - setter onmouseleave - setter onmousemove - setter onmouseout - setter onmouseover - setter onmouseup - setter onmousewheel - setter onoverscroll - setter onpaste - setter onpause - setter onplay - setter onplaying - setter onpointercancel - setter onpointerdown - setter onpointerenter - setter onpointerleave - setter onpointermove - setter onpointerout - setter onpointerover - setter onpointerrawupdate - setter onpointerup - setter onprogress - setter onratechange - setter onrendersubtreeactivation - setter onreset - setter onresize - setter onscroll - setter onscrollend - setter onseeked - setter onseeking - setter onselect - setter onselectionchange - setter onselectstart - setter onstalled - setter onsubmit - setter onsuspend - setter ontimeupdate - setter ontoggle - setter ontouchcancel - setter ontouchend - setter ontouchmove - setter ontouchstart - setter ontransitionend - setter onvolumechange - setter onwaiting - setter onwheel - setter outerText - setter spellcheck - setter style - setter tabIndex - setter title - setter translate -interface HTMLEmbedElement : HTMLElement - attribute @@toStringTag - getter align - getter height - getter name - getter src - getter type - getter width - method constructor - method getSVGDocument - setter align - setter height - setter name - setter src - setter type - setter width -interface HTMLFieldSetElement : HTMLElement - attribute @@toStringTag - getter disabled - getter elements - getter form - getter name - getter type - getter validationMessage - getter validity - getter willValidate - method checkValidity - method constructor - method reportValidity - method setCustomValidity - setter disabled - setter name -interface HTMLFontElement : HTMLElement - attribute @@toStringTag - getter color - getter face - getter size - method constructor - setter color - setter face - setter size -interface HTMLFormControlsCollection : HTMLCollection - attribute @@toStringTag - method constructor - method namedItem -interface HTMLFormElement : HTMLElement - attribute @@toStringTag - getter acceptCharset - getter action - getter autocomplete - getter elements - getter encoding - getter enctype - getter length - getter method - getter name - getter noValidate - getter target - method @@iterator - method checkValidity - method constructor - method reportValidity - method requestSubmit - method reset - method submit - setter acceptCharset - setter action - setter autocomplete - setter encoding - setter enctype - setter method - setter name - setter noValidate - setter target -interface HTMLFrameElement : HTMLElement - attribute @@toStringTag - getter contentDocument - getter contentWindow - getter frameBorder - getter longDesc - getter marginHeight - getter marginWidth - getter name - getter noResize - getter scrolling - getter src - method constructor - setter frameBorder - setter longDesc - setter marginHeight - setter marginWidth - setter name - setter noResize - setter scrolling - setter src -interface HTMLFrameSetElement : HTMLElement - attribute @@toStringTag - getter cols - getter onafterprint - getter onbeforeprint - getter onbeforeunload - getter onblur - getter onerror - getter onfocus - getter onhashchange - getter onlanguagechange - getter onload - getter onmessage - getter onmessageerror - getter onoffline - getter ononline - getter onpagehide - getter onpageshow - getter onpopstate - getter onportalactivate - getter onrejectionhandled - getter onresize - getter onscroll - getter onstorage - getter onunhandledrejection - getter onunload - getter rows - method constructor - setter cols - setter onafterprint - setter onbeforeprint - setter onbeforeunload - setter onblur - setter onerror - setter onfocus - setter onhashchange - setter onlanguagechange - setter onload - setter onmessage - setter onmessageerror - setter onoffline - setter ononline - setter onpagehide - setter onpageshow - setter onpopstate - setter onportalactivate - setter onrejectionhandled - setter onresize - setter onscroll - setter onstorage - setter onunhandledrejection - setter onunload - setter rows -interface HTMLHRElement : HTMLElement - attribute @@toStringTag - getter align - getter color - getter noShade - getter size - getter width - method constructor - setter align - setter color - setter noShade - setter size - setter width -interface HTMLHeadElement : HTMLElement - attribute @@toStringTag - method constructor -interface HTMLHeadingElement : HTMLElement - attribute @@toStringTag - getter align - method constructor - setter align -interface HTMLHtmlElement : HTMLElement - attribute @@toStringTag - getter version - method constructor - setter version -interface HTMLIFrameElement : HTMLElement - attribute @@toStringTag - getter align - getter allow - getter allowFullscreen - getter allowPaymentRequest - getter contentDocument - getter contentWindow - getter csp - getter featurePolicy - getter frameBorder - getter height - getter loading - getter longDesc - getter marginHeight - getter marginWidth - getter name - getter referrerPolicy - getter sandbox - getter scrolling - getter src - getter srcdoc - getter width - method constructor - method getSVGDocument - setter align - setter allow - setter allowFullscreen - setter allowPaymentRequest - setter csp - setter frameBorder - setter height - setter loading - setter longDesc - setter marginHeight - setter marginWidth - setter name - setter referrerPolicy - setter sandbox - setter scrolling - setter src - setter srcdoc - setter width -interface HTMLImageElement : HTMLElement - attribute @@toStringTag - getter align - getter alt - getter border - getter complete - getter crossOrigin - getter currentSrc - getter decoding - getter height - getter hspace - getter importance - getter isMap - getter loading - getter longDesc - getter lowsrc - getter name - getter naturalHeight - getter naturalWidth - getter referrerPolicy - getter sizes - getter src - getter srcset - getter useMap - getter vspace - getter width - getter x - getter y - method constructor - method decode - setter align - setter alt - setter border - setter crossOrigin - setter decoding - setter height - setter hspace - setter importance - setter isMap - setter loading - setter longDesc - setter lowsrc - setter name - setter referrerPolicy - setter sizes - setter src - setter srcset - setter useMap - setter vspace - setter width -interface HTMLInputElement : HTMLElement - attribute @@toStringTag - getter accept - getter align - getter alt - getter autocomplete - getter checked - getter defaultChecked - getter defaultValue - getter dirName - getter disabled - getter files - getter form - getter formAction - getter formEnctype - getter formMethod - getter formNoValidate - getter formTarget - getter height - getter incremental - getter indeterminate - getter labels - getter list - getter max - getter maxLength - getter min - getter minLength - getter multiple - getter name - getter pattern - getter placeholder - getter readOnly - getter required - getter selectionDirection - getter selectionEnd - getter selectionStart - getter size - getter src - getter step - getter type - getter useMap - getter validationMessage - getter validity - getter value - getter valueAsDate - getter valueAsNumber - getter webkitEntries - getter webkitdirectory - getter width - getter willValidate - method checkValidity - method constructor - method reportValidity - method select - method setCustomValidity - method setRangeText - method setSelectionRange - method stepDown - method stepUp - setter accept - setter align - setter alt - setter autocomplete - setter checked - setter defaultChecked - setter defaultValue - setter dirName - setter disabled - setter files - setter formAction - setter formEnctype - setter formMethod - setter formNoValidate - setter formTarget - setter height - setter incremental - setter indeterminate - setter max - setter maxLength - setter min - setter minLength - setter multiple - setter name - setter pattern - setter placeholder - setter readOnly - setter required - setter selectionDirection - setter selectionEnd - setter selectionStart - setter size - setter src - setter step - setter type - setter useMap - setter value - setter valueAsDate - setter valueAsNumber - setter webkitdirectory - setter width -interface HTMLLIElement : HTMLElement - attribute @@toStringTag - getter type - getter value - method constructor - setter type - setter value -interface HTMLLabelElement : HTMLElement - attribute @@toStringTag - getter control - getter form - getter htmlFor - method constructor - setter htmlFor -interface HTMLLegendElement : HTMLElement - attribute @@toStringTag - getter align - getter form - method constructor - setter align -interface HTMLLinkElement : HTMLElement - attribute @@toStringTag - getter as - getter charset - getter crossOrigin - getter disabled - getter href - getter hreflang - getter imageSizes - getter imageSrcset - getter import - getter importance - getter integrity - getter media - getter referrerPolicy - getter rel - getter relList - getter rev - getter sheet - getter sizes - getter target - getter type - method constructor - setter as - setter charset - setter crossOrigin - setter disabled - setter href - setter hreflang - setter imageSizes - setter imageSrcset - setter importance - setter integrity - setter media - setter referrerPolicy - setter rel - setter relList - setter rev - setter sizes - setter target - setter type -interface HTMLMapElement : HTMLElement - attribute @@toStringTag - getter areas - getter name - method constructor - setter name -interface HTMLMarqueeElement : HTMLElement - attribute @@toStringTag - getter behavior - getter bgColor - getter direction - getter height - getter hspace - getter loop - getter scrollAmount - getter scrollDelay - getter trueSpeed - getter vspace - getter width - method constructor - method start - method stop - setter behavior - setter bgColor - setter direction - setter height - setter hspace - setter loop - setter scrollAmount - setter scrollDelay - setter trueSpeed - setter vspace - setter width -interface HTMLMediaElement : HTMLElement - attribute @@toStringTag - attribute HAVE_CURRENT_DATA - attribute HAVE_ENOUGH_DATA - attribute HAVE_FUTURE_DATA - attribute HAVE_METADATA - attribute HAVE_NOTHING - attribute NETWORK_EMPTY - attribute NETWORK_IDLE - attribute NETWORK_LOADING - attribute NETWORK_NO_SOURCE - getter audioTracks - getter autoplay - getter buffered - getter controls - getter controlsList - getter crossOrigin - getter currentSrc - getter currentTime - getter defaultMuted - getter defaultPlaybackRate - getter disableRemotePlayback - getter duration - getter ended - getter error - getter latencyHint - getter loop - getter mediaKeys - getter muted - getter networkState - getter onencrypted - getter onwaitingforkey - getter paused - getter playbackRate - getter played - getter preload - getter readyState - getter remote - getter seekable - getter seeking - getter sinkId - getter src - getter srcObject - getter textTracks - getter videoTracks - getter volume - getter webkitAudioDecodedByteCount - getter webkitVideoDecodedByteCount - method addTextTrack - method canPlayType - method captureStream - method constructor - method load - method pause - method play - method setMediaKeys - method setSinkId - setter autoplay - setter controls - setter controlsList - setter crossOrigin - setter currentTime - setter defaultMuted - setter defaultPlaybackRate - setter disableRemotePlayback - setter latencyHint - setter loop - setter muted - setter onencrypted - setter onwaitingforkey - setter playbackRate - setter preload - setter src - setter srcObject - setter volume -interface HTMLMenuElement : HTMLElement - attribute @@toStringTag - getter compact - method constructor - setter compact -interface HTMLMetaElement : HTMLElement - attribute @@toStringTag - getter content - getter httpEquiv - getter name - getter scheme - method constructor - setter content - setter httpEquiv - setter name - setter scheme -interface HTMLMeterElement : HTMLElement - attribute @@toStringTag - getter high - getter labels - getter low - getter max - getter min - getter optimum - getter value - method constructor - setter high - setter low - setter max - setter min - setter optimum - setter value -interface HTMLModElement : HTMLElement - attribute @@toStringTag - getter cite - getter dateTime - method constructor - setter cite - setter dateTime -interface HTMLOListElement : HTMLElement - attribute @@toStringTag - getter compact - getter reversed - getter start - getter type - method constructor - setter compact - setter reversed - setter start - setter type -interface HTMLObjectElement : HTMLElement - attribute @@toStringTag - getter align - getter archive - getter border - getter code - getter codeBase - getter codeType - getter contentDocument - getter contentWindow - getter data - getter declare - getter form - getter height - getter hspace - getter name - getter standby - getter type - getter useMap - getter validationMessage - getter validity - getter vspace - getter width - getter willValidate - method checkValidity - method constructor - method getSVGDocument - method reportValidity - method setCustomValidity - setter align - setter archive - setter border - setter code - setter codeBase - setter codeType - setter data - setter declare - setter height - setter hspace - setter name - setter standby - setter type - setter useMap - setter vspace - setter width -interface HTMLOptGroupElement : HTMLElement - attribute @@toStringTag - getter disabled - getter label - method constructor - setter disabled - setter label -interface HTMLOptionElement : HTMLElement - attribute @@toStringTag - getter defaultSelected - getter disabled - getter form - getter index - getter label - getter selected - getter text - getter value - method constructor - setter defaultSelected - setter disabled - setter label - setter selected - setter text - setter value -interface HTMLOptionsCollection : HTMLCollection - attribute @@toStringTag - getter length - getter selectedIndex - method @@iterator - method add - method constructor - method remove - setter length - setter selectedIndex -interface HTMLOutputElement : HTMLElement - attribute @@toStringTag - getter defaultValue - getter form - getter htmlFor - getter labels - getter name - getter type - getter validationMessage - getter validity - getter value - getter willValidate - method checkValidity - method constructor - method reportValidity - method setCustomValidity - setter defaultValue - setter htmlFor - setter name - setter value -interface HTMLParagraphElement : HTMLElement - attribute @@toStringTag - getter align - method constructor - setter align -interface HTMLParamElement : HTMLElement - attribute @@toStringTag - getter name - getter type - getter value - getter valueType - method constructor - setter name - setter type - setter value - setter valueType -interface HTMLPictureElement : HTMLElement - attribute @@toStringTag - method constructor -interface HTMLPortalElement : HTMLElement - attribute @@toStringTag - getter onmessage - getter onmessageerror - getter referrerPolicy - getter src - method activate - method constructor - method postMessage - setter onmessage - setter onmessageerror - setter referrerPolicy - setter src -interface HTMLPreElement : HTMLElement - attribute @@toStringTag - getter width - method constructor - setter width -interface HTMLProgressElement : HTMLElement - attribute @@toStringTag - getter labels - getter max - getter position - getter value - method constructor - setter max - setter value -interface HTMLQuoteElement : HTMLElement - attribute @@toStringTag - getter cite - method constructor - setter cite -interface HTMLScriptElement : HTMLElement - attribute @@toStringTag - getter async - getter charset - getter crossOrigin - getter defer - getter event - getter htmlFor - getter importance - getter integrity - getter noModule - getter referrerPolicy - getter src - getter text - getter type - method constructor - setter async - setter charset - setter crossOrigin - setter defer - setter event - setter htmlFor - setter importance - setter integrity - setter noModule - setter referrerPolicy - setter src - setter text - setter type -interface HTMLSelectElement : HTMLElement - attribute @@toStringTag - getter autocomplete - getter disabled - getter form - getter labels - getter length - getter multiple - getter name - getter options - getter required - getter selectedIndex - getter selectedOptions - getter size - getter type - getter validationMessage - getter validity - getter value - getter willValidate - method @@iterator - method add - method checkValidity - method constructor - method item - method namedItem - method remove - method reportValidity - method setCustomValidity - setter autocomplete - setter disabled - setter length - setter multiple - setter name - setter required - setter selectedIndex - setter size - setter value -interface HTMLShadowElement : HTMLElement - attribute @@toStringTag - method constructor - method getDistributedNodes -interface HTMLSlotElement : HTMLElement - attribute @@toStringTag - getter name - method assign - method assignedElements - method assignedNodes - method constructor - setter name -interface HTMLSourceElement : HTMLElement - attribute @@toStringTag - getter media - getter sizes - getter src - getter srcset - getter type - method constructor - setter media - setter sizes - setter src - setter srcset - setter type -interface HTMLSpanElement : HTMLElement - attribute @@toStringTag - method constructor -interface HTMLStyleElement : HTMLElement - attribute @@toStringTag - getter disabled - getter media - getter sheet - getter type - method constructor - setter disabled - setter media - setter type -interface HTMLTableCaptionElement : HTMLElement - attribute @@toStringTag - getter align - method constructor - setter align -interface HTMLTableCellElement : HTMLElement - attribute @@toStringTag - getter abbr - getter align - getter axis - getter bgColor - getter cellIndex - getter ch - getter chOff - getter colSpan - getter headers - getter height - getter noWrap - getter rowSpan - getter scope - getter vAlign - getter width - method constructor - setter abbr - setter align - setter axis - setter bgColor - setter ch - setter chOff - setter colSpan - setter headers - setter height - setter noWrap - setter rowSpan - setter scope - setter vAlign - setter width -interface HTMLTableColElement : HTMLElement - attribute @@toStringTag - getter align - getter ch - getter chOff - getter span - getter vAlign - getter width - method constructor - setter align - setter ch - setter chOff - setter span - setter vAlign - setter width -interface HTMLTableElement : HTMLElement - attribute @@toStringTag - getter align - getter bgColor - getter border - getter caption - getter cellPadding - getter cellSpacing - getter frame - getter rows - getter rules - getter summary - getter tBodies - getter tFoot - getter tHead - getter width - method constructor - method createCaption - method createTBody - method createTFoot - method createTHead - method deleteCaption - method deleteRow - method deleteTFoot - method deleteTHead - method insertRow - setter align - setter bgColor - setter border - setter caption - setter cellPadding - setter cellSpacing - setter frame - setter rules - setter summary - setter tFoot - setter tHead - setter width -interface HTMLTableRowElement : HTMLElement - attribute @@toStringTag - getter align - getter bgColor - getter cells - getter ch - getter chOff - getter rowIndex - getter sectionRowIndex - getter vAlign - method constructor - method deleteCell - method insertCell - setter align - setter bgColor - setter ch - setter chOff - setter vAlign -interface HTMLTableSectionElement : HTMLElement - attribute @@toStringTag - getter align - getter ch - getter chOff - getter rows - getter vAlign - method constructor - method deleteRow - method insertRow - setter align - setter ch - setter chOff - setter vAlign -interface HTMLTemplateElement : HTMLElement - attribute @@toStringTag - getter content - method constructor -interface HTMLTextAreaElement : HTMLElement - attribute @@toStringTag - getter autocomplete - getter cols - getter defaultValue - getter dirName - getter disabled - getter form - getter labels - getter maxLength - getter minLength - getter name - getter placeholder - getter readOnly - getter required - getter rows - getter selectionDirection - getter selectionEnd - getter selectionStart - getter textLength - getter type - getter validationMessage - getter validity - getter value - getter willValidate - getter wrap - method checkValidity - method constructor - method reportValidity - method select - method setCustomValidity - method setRangeText - method setSelectionRange - setter autocomplete - setter cols - setter defaultValue - setter dirName - setter disabled - setter maxLength - setter minLength - setter name - setter placeholder - setter readOnly - setter required - setter rows - setter selectionDirection - setter selectionEnd - setter selectionStart - setter value - setter wrap -interface HTMLTimeElement : HTMLElement - attribute @@toStringTag - getter dateTime - method constructor - setter dateTime -interface HTMLTitleElement : HTMLElement - attribute @@toStringTag - getter text - method constructor - setter text -interface HTMLTrackElement : HTMLElement - attribute @@toStringTag - attribute ERROR - attribute LOADED - attribute LOADING - attribute NONE - getter default - getter kind - getter label - getter readyState - getter src - getter srclang - getter track - method constructor - setter default - setter kind - setter label - setter src - setter srclang -interface HTMLUListElement : HTMLElement - attribute @@toStringTag - getter compact - getter type - method constructor - setter compact - setter type -interface HTMLUnknownElement : HTMLElement - attribute @@toStringTag - method constructor -interface HTMLVideoElement : HTMLMediaElement - attribute @@toStringTag - getter autoPictureInPicture - getter disablePictureInPicture - getter height - getter onenterpictureinpicture - getter onleavepictureinpicture - getter playsInline - getter poster - getter videoHeight - getter videoWidth - getter webkitDecodedFrameCount - getter webkitDisplayingFullscreen - getter webkitDroppedFrameCount - getter webkitSupportsFullscreen - getter width - method constructor - method getVideoPlaybackQuality - method requestPictureInPicture - method webkitEnterFullScreen - method webkitEnterFullscreen - method webkitExitFullScreen - method webkitExitFullscreen - setter autoPictureInPicture - setter disablePictureInPicture - setter height - setter onenterpictureinpicture - setter onleavepictureinpicture - setter playsInline - setter poster - setter width -interface HashChangeEvent : Event - attribute @@toStringTag - getter newURL - getter oldURL - method constructor -interface Headers - attribute @@toStringTag - method @@iterator - method append - method constructor - method delete - method entries - method forEach - method get - method has - method keys - method set - method values -interface History - attribute @@toStringTag - getter length - getter scrollRestoration - getter state - method back - method constructor - method forward - method go - method pushState - method replaceState - setter scrollRestoration -interface IDBCursor - attribute @@toStringTag - getter direction - getter key - getter primaryKey - getter request - getter source - method advance - method constructor - method continue - method continuePrimaryKey - method delete - method update -interface IDBCursorWithValue : IDBCursor - attribute @@toStringTag - getter value - method constructor -interface IDBDatabase : EventTarget - attribute @@toStringTag - getter name - getter objectStoreNames - getter onabort - getter onclose - getter onerror - getter onversionchange - getter version - method close - method constructor - method createObjectStore - method deleteObjectStore - method transaction - setter onabort - setter onclose - setter onerror - setter onversionchange -interface IDBFactory - attribute @@toStringTag - method cmp - method constructor - method databases - method deleteDatabase - method open -interface IDBIndex - attribute @@toStringTag - getter keyPath - getter multiEntry - getter name - getter objectStore - getter unique - method constructor - method count - method get - method getAll - method getAllKeys - method getKey - method openCursor - method openKeyCursor - setter name -interface IDBKeyRange - static method bound - static method lowerBound - static method only - static method upperBound - attribute @@toStringTag - getter lower - getter lowerOpen - getter upper - getter upperOpen - method constructor - method includes -interface IDBObjectStore - attribute @@toStringTag - getter autoIncrement - getter indexNames - getter keyPath - getter name - getter transaction - method add - method clear - method constructor - method count - method createIndex - method delete - method deleteIndex - method get - method getAll - method getAllKeys - method getKey - method index - method openCursor - method openKeyCursor - method put - setter name -interface IDBObservation - attribute @@toStringTag - getter key - getter type - getter value - method constructor -interface IDBObserver - attribute @@toStringTag - method constructor - method observe - method unobserve -interface IDBObserverChanges - attribute @@toStringTag - getter database - getter records - getter transaction - method constructor -interface IDBOpenDBRequest : IDBRequest - attribute @@toStringTag - getter onblocked - getter onupgradeneeded - method constructor - setter onblocked - setter onupgradeneeded -interface IDBRequest : EventTarget - attribute @@toStringTag - getter error - getter onerror - getter onsuccess - getter readyState - getter result - getter source - getter transaction - method constructor - setter onerror - setter onsuccess -interface IDBTransaction : EventTarget - attribute @@toStringTag - getter db - getter durability - getter error - getter mode - getter objectStoreNames - getter onabort - getter oncomplete - getter onerror - method abort - method commit - method constructor - method objectStore - setter onabort - setter oncomplete - setter onerror -interface IDBVersionChangeEvent : Event - attribute @@toStringTag - getter dataLoss - getter dataLossMessage - getter newVersion - getter oldVersion - method constructor -interface IIRFilterNode : AudioNode - attribute @@toStringTag - method constructor - method getFrequencyResponse -interface IdleDeadline - attribute @@toStringTag - getter didTimeout - method constructor - method timeRemaining -interface IdleDetector : EventTarget - attribute @@toStringTag - getter onchange - getter state - method constructor - method start - method stop - setter onchange -interface IdleState - attribute @@toStringTag - getter screen - getter user - method constructor -interface Image - attribute @@toStringTag - getter align - getter alt - getter border - getter complete - getter crossOrigin - getter currentSrc - getter decoding - getter height - getter hspace - getter importance - getter isMap - getter loading - getter longDesc - getter lowsrc - getter name - getter naturalHeight - getter naturalWidth - getter referrerPolicy - getter sizes - getter src - getter srcset - getter useMap - getter vspace - getter width - getter x - getter y - method constructor - method decode - setter align - setter alt - setter border - setter crossOrigin - setter decoding - setter height - setter hspace - setter importance - setter isMap - setter loading - setter longDesc - setter lowsrc - setter name - setter referrerPolicy - setter sizes - setter src - setter srcset - setter useMap - setter vspace - setter width -interface ImageBitmap - attribute @@toStringTag - getter height - getter width - method close - method constructor -interface ImageBitmapRenderingContext - attribute @@toStringTag - getter canvas - method constructor - method transferFromImageBitmap -interface ImageCapture - attribute @@toStringTag - getter track - method constructor - method getPhotoCapabilities - method getPhotoSettings - method grabFrame - method takePhoto -interface ImageData - attribute @@toStringTag - getter data - getter dataUnion - getter height - getter width - method constructor - method getColorSettings -interface InputDeviceCapabilities - attribute @@toStringTag - getter firesTouchEvents - method constructor -interface InputDeviceInfo : MediaDeviceInfo - attribute @@toStringTag - method constructor - method getCapabilities -interface InputEvent : UIEvent - attribute @@toStringTag - getter data - getter dataTransfer - getter inputType - getter isComposing - method constructor - method getTargetRanges -interface IntersectionObserver - attribute @@toStringTag - getter delay - getter root - getter rootMargin - getter thresholds - getter trackVisibility - method constructor - method disconnect - method observe - method takeRecords - method unobserve -interface IntersectionObserverEntry - attribute @@toStringTag - getter boundingClientRect - getter intersectionRatio - getter intersectionRect - getter isIntersecting - getter isVisible - getter rootBounds - getter target - getter time - method constructor -interface Keyboard - attribute @@toStringTag - method constructor - method getLayoutMap - method lock - method unlock -interface KeyboardEvent : UIEvent - attribute @@toStringTag - attribute DOM_KEY_LOCATION_LEFT - attribute DOM_KEY_LOCATION_NUMPAD - attribute DOM_KEY_LOCATION_RIGHT - attribute DOM_KEY_LOCATION_STANDARD - getter altKey - getter charCode - getter code - getter ctrlKey - getter isComposing - getter key - getter keyCode - getter location - getter metaKey - getter repeat - getter shiftKey - method constructor - method getModifierState - method initKeyboardEvent -interface KeyboardLayoutMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface KeyframeEffect : AnimationEffect - attribute @@toStringTag - getter composite - getter target - method constructor - method getKeyframes - method setKeyframes - setter composite - setter target -interface LargestContentfulPaint : PerformanceEntry - attribute @@toStringTag - getter element - getter id - getter loadTime - getter renderTime - getter size - getter url - method constructor - method toJSON -interface LayoutShift : PerformanceEntry - attribute @@toStringTag - getter hadRecentInput - getter lastInputTime - getter value - method constructor - method toJSON -interface LinearAccelerationSensor : Accelerometer - attribute @@toStringTag - method constructor -interface Location - attribute @@toStringTag - method constructor -interface Lock - attribute @@toStringTag - getter mode - getter name - method constructor -interface LockManager - attribute @@toStringTag - method constructor - method query - method request -interface MIDIAccess : EventTarget - attribute @@toStringTag - getter inputs - getter onstatechange - getter outputs - getter sysexEnabled - method constructor - setter onstatechange -interface MIDIConnectionEvent : Event - attribute @@toStringTag - getter port - method constructor -interface MIDIInput : MIDIPort - attribute @@toStringTag - getter onmidimessage - method constructor - setter onmidimessage -interface MIDIInputMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface MIDIMessageEvent : Event - attribute @@toStringTag - getter data - method constructor -interface MIDIOutput : MIDIPort - attribute @@toStringTag - method constructor - method send -interface MIDIOutputMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface MIDIPort : EventTarget - attribute @@toStringTag - getter connection - getter id - getter manufacturer - getter name - getter onstatechange - getter state - getter type - getter version - method close - method constructor - method open - setter onstatechange -interface Magnetometer : Sensor - attribute @@toStringTag - getter x - getter y - getter z - method constructor -interface MediaCapabilities - attribute @@toStringTag - method constructor - method decodingInfo - method encodingInfo -interface MediaDeviceInfo - attribute @@toStringTag - getter deviceId - getter groupId - getter kind - getter label - method constructor - method toJSON -interface MediaDevices : EventTarget - attribute @@toStringTag - getter ondevicechange - method constructor - method enumerateDevices - method getDisplayMedia - method getSupportedConstraints - method getUserMedia - setter ondevicechange -interface MediaElementAudioSourceNode : AudioNode - attribute @@toStringTag - getter mediaElement - method constructor -interface MediaEncryptedEvent : Event - attribute @@toStringTag - getter initData - getter initDataType - method constructor -interface MediaError - attribute @@toStringTag - attribute MEDIA_ERR_ABORTED - attribute MEDIA_ERR_DECODE - attribute MEDIA_ERR_NETWORK - attribute MEDIA_ERR_SRC_NOT_SUPPORTED - getter code - getter message - method constructor -interface MediaKeyMessageEvent : Event - attribute @@toStringTag - getter message - getter messageType - method constructor -interface MediaKeySession : EventTarget - attribute @@toStringTag - getter closed - getter expiration - getter keyStatuses - getter onkeystatuseschange - getter onmessage - getter sessionId - method close - method constructor - method generateRequest - method load - method remove - method update - setter onkeystatuseschange - setter onmessage -interface MediaKeyStatusMap - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface MediaKeySystemAccess - attribute @@toStringTag - getter keySystem - method constructor - method createMediaKeys - method getConfiguration -interface MediaKeys - attribute @@toStringTag - method constructor - method createSession - method getStatusForPolicy - method setServerCertificate -interface MediaList - attribute @@toStringTag - getter length - getter mediaText - method @@iterator - method appendMedium - method constructor - method deleteMedium - method item - method toString - setter mediaText -interface MediaMetadata - attribute @@toStringTag - getter album - getter artist - getter artwork - getter title - method constructor - setter album - setter artist - setter artwork - setter title -interface MediaQueryList : EventTarget - attribute @@toStringTag - getter matches - getter media - getter onchange - method addListener - method constructor - method removeListener - setter onchange -interface MediaQueryListEvent : Event - attribute @@toStringTag - getter matches - getter media - method constructor -interface MediaRecorder : EventTarget - static method isTypeSupported - attribute @@toStringTag - getter audioBitsPerSecond - getter mimeType - getter ondataavailable - getter onerror - getter onpause - getter onresume - getter onstart - getter onstop - getter state - getter stream - getter videoBitsPerSecond - method constructor - method pause - method requestData - method resume - method start - method stop - setter ondataavailable - setter onerror - setter onpause - setter onresume - setter onstart - setter onstop -interface MediaSession - attribute @@toStringTag - getter metadata - getter playbackState - method constructor - method setActionHandler - method setPositionState - setter metadata - setter playbackState -interface MediaSettingsRange - attribute @@toStringTag - getter max - getter min - getter step - method constructor -interface MediaSource : EventTarget - static method isTypeSupported - attribute @@toStringTag - getter activeSourceBuffers - getter duration - getter onsourceclose - getter onsourceended - getter onsourceopen - getter readyState - getter sourceBuffers - method addSourceBuffer - method clearLiveSeekableRange - method constructor - method endOfStream - method removeSourceBuffer - method setLiveSeekableRange - setter duration - setter onsourceclose - setter onsourceended - setter onsourceopen -interface MediaStream : EventTarget - attribute @@toStringTag - getter active - getter id - getter onactive - getter onaddtrack - getter oninactive - getter onremovetrack - method addTrack - method clone - method constructor - method getAudioTracks - method getTrackById - method getTracks - method getVideoTracks - method removeTrack - setter onactive - setter onaddtrack - setter oninactive - setter onremovetrack -interface MediaStreamAudioDestinationNode : AudioNode - attribute @@toStringTag - getter stream - method constructor -interface MediaStreamAudioSourceNode : AudioNode - attribute @@toStringTag - getter mediaStream - method constructor -interface MediaStreamEvent : Event - attribute @@toStringTag - getter stream - method constructor -interface MediaStreamTrack : EventTarget - attribute @@toStringTag - getter contentHint - getter enabled - getter id - getter kind - getter label - getter muted - getter onended - getter onmute - getter onunmute - getter readyState - method applyConstraints - method clone - method constructor - method getCapabilities - method getConstraints - method getSettings - method stop - setter contentHint - setter enabled - setter onended - setter onmute - setter onunmute -interface MediaStreamTrackEvent : Event - attribute @@toStringTag - getter track - method constructor -interface MerchantValidationEvent : Event - attribute @@toStringTag - getter methodName - getter validationURL - method complete - method constructor -interface MessageChannel - attribute @@toStringTag - getter port1 - getter port2 - method constructor -interface MessageEvent : Event - attribute @@toStringTag - getter data - getter lastEventId - getter origin - getter ports - getter source - getter userActivation - method constructor - method initMessageEvent -interface MessagePort : EventTarget - attribute @@toStringTag - getter onmessage - getter onmessageerror - method close - method constructor - method postMessage - method start - setter onmessage - setter onmessageerror -interface MimeType - attribute @@toStringTag - getter description - getter enabledPlugin - getter suffixes - getter type - method constructor -interface MimeTypeArray - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item - method namedItem -interface Mojo - static method bindInterface - static method createDataPipe - static method createMessagePipe - static method createSharedBuffer - attribute @@toStringTag - attribute RESULT_ABORTED - attribute RESULT_ALREADY_EXISTS - attribute RESULT_BUSY - attribute RESULT_CANCELLED - attribute RESULT_DATA_LOSS - attribute RESULT_DEADLINE_EXCEEDED - attribute RESULT_FAILED_PRECONDITION - attribute RESULT_INTERNAL - attribute RESULT_INVALID_ARGUMENT - attribute RESULT_NOT_FOUND - attribute RESULT_OK - attribute RESULT_OUT_OF_RANGE - attribute RESULT_PERMISSION_DENIED - attribute RESULT_RESOURCE_EXHAUSTED - attribute RESULT_SHOULD_WAIT - attribute RESULT_UNAVAILABLE - attribute RESULT_UNIMPLEMENTED - attribute RESULT_UNKNOWN - method constructor -interface MojoHandle - attribute @@toStringTag - method close - method constructor - method discardData - method duplicateBufferHandle - method mapBuffer - method queryData - method readData - method readMessage - method watch - method writeData - method writeMessage -interface MojoInterfaceInterceptor : EventTarget - attribute @@toStringTag - getter oninterfacerequest - method constructor - method start - method stop - setter oninterfacerequest -interface MojoInterfaceRequestEvent : Event - attribute @@toStringTag - getter handle - method constructor -interface MojoWatcher - attribute @@toStringTag - method cancel - method constructor -interface MouseEvent : UIEvent - attribute @@toStringTag - getter altKey - getter button - getter buttons - getter clientX - getter clientY - getter ctrlKey - getter fromElement - getter layerX - getter layerY - getter metaKey - getter movementX - getter movementY - getter offsetX - getter offsetY - getter pageX - getter pageY - getter region - getter relatedTarget - getter screenX - getter screenY - getter shiftKey - getter toElement - getter x - getter y - method constructor - method getModifierState - method initMouseEvent -interface MutationEvent : Event - attribute @@toStringTag - attribute ADDITION - attribute MODIFICATION - attribute REMOVAL - getter attrChange - getter attrName - getter newValue - getter prevValue - getter relatedNode - method constructor - method initMutationEvent -interface MutationObserver - attribute @@toStringTag - method constructor - method disconnect - method observe - method takeRecords -interface MutationRecord - attribute @@toStringTag - getter addedNodes - getter attributeName - getter attributeNamespace - getter nextSibling - getter oldValue - getter previousSibling - getter removedNodes - getter target - getter type - method constructor -interface NDEFMessage - attribute @@toStringTag - getter records - getter url - method constructor -interface NDEFReader : EventTarget - attribute @@toStringTag - getter onerror - getter onreading - method constructor - method scan - setter onerror - setter onreading -interface NDEFReadingEvent : Event - attribute @@toStringTag - getter message - getter serialNumber - method constructor -interface NDEFRecord - attribute @@toStringTag - getter data - getter encoding - getter id - getter lang - getter mediaType - getter recordType - method constructor - method toRecords -interface NDEFWriter - attribute @@toStringTag - method constructor - method push -interface NamedNodeMap - attribute @@toStringTag - getter length - method @@iterator - method constructor - method getNamedItem - method getNamedItemNS - method item - method removeNamedItem - method removeNamedItemNS - method setNamedItem - method setNamedItemNS -interface NavigationPreloadManager - attribute @@toStringTag - method constructor - method disable - method enable - method getState - method setHeaderValue -interface Navigator - attribute @@toStringTag - getter appCodeName - getter appName - getter appVersion - getter clipboard - getter connection - getter contacts - getter cookieEnabled - getter credentials - getter deviceMemory - getter doNotTrack - getter geolocation - getter hardwareConcurrency - getter hid - getter keyboard - getter language - getter languages - getter locks - getter maxTouchPoints - getter mediaCapabilities - getter mediaDevices - getter mediaSession - getter mimeTypes - getter onLine - getter permissions - getter platform - getter plugins - getter presentation - getter product - getter productSub - getter scheduling - getter screen - getter serial - getter serviceWorker - getter sms - getter storage - getter usb - getter userActivation - getter userAgent - getter vendor - getter vendorSub - getter wakeLock - getter webkitPersistentStorage - getter webkitTemporaryStorage - getter xr - method canShare - method clearExperimentalAppBadge - method constructor - method getBattery - method getGamepads - method getInstalledRelatedApps - method getUserAgent - method getUserMedia - method javaEnabled - method registerProtocolHandler - method requestMIDIAccess - method requestMediaKeySystemAccess - method sendBeacon - method setExperimentalAppBadge - method share - method unregisterProtocolHandler - method vibrate - method webkitGetUserMedia -interface NetworkInformation : EventTarget - attribute @@toStringTag - getter downlink - getter downlinkMax - getter effectiveType - getter onchange - getter ontypechange - getter rtt - getter saveData - getter type - method constructor - setter onchange - setter ontypechange -interface Node : EventTarget - attribute @@toStringTag - attribute ATTRIBUTE_NODE - attribute CDATA_SECTION_NODE - attribute COMMENT_NODE - attribute DOCUMENT_FRAGMENT_NODE - attribute DOCUMENT_NODE - attribute DOCUMENT_POSITION_CONTAINED_BY - attribute DOCUMENT_POSITION_CONTAINS - attribute DOCUMENT_POSITION_DISCONNECTED - attribute DOCUMENT_POSITION_FOLLOWING - attribute DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC - attribute DOCUMENT_POSITION_PRECEDING - attribute DOCUMENT_TYPE_NODE - attribute ELEMENT_NODE - attribute ENTITY_NODE - attribute ENTITY_REFERENCE_NODE - attribute NOTATION_NODE - attribute PROCESSING_INSTRUCTION_NODE - attribute TEXT_NODE - getter baseURI - getter childNodes - getter firstChild - getter isConnected - getter lastChild - getter nextSibling - getter nodeName - getter nodeType - getter nodeValue - getter ownerDocument - getter parentElement - getter parentNode - getter previousSibling - getter textContent - method appendChild - method cloneNode - method compareDocumentPosition - method constructor - method contains - method getRootNode - method hasChildNodes - method insertBefore - method isDefaultNamespace - method isEqualNode - method isSameNode - method lookupNamespaceURI - method lookupPrefix - method normalize - method removeChild - method replaceChild - setter nodeValue - setter textContent -interface NodeIterator - attribute @@toStringTag - getter filter - getter pointerBeforeReferenceNode - getter referenceNode - getter root - getter whatToShow - method constructor - method detach - method nextNode - method previousNode -interface NodeList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method entries - method forEach - method item - method keys - method values -interface Notification : EventTarget - static getter maxActions - static getter permission - static method requestPermission - attribute @@toStringTag - getter actions - getter badge - getter body - getter data - getter dir - getter icon - getter lang - getter onclick - getter onclose - getter onerror - getter onshow - getter renotify - getter requireInteraction - getter showTrigger - getter silent - getter tag - getter timestamp - getter title - getter vibrate - method close - method constructor - setter onclick - setter onclose - setter onerror - setter onshow -interface OfflineAudioCompletionEvent : Event - attribute @@toStringTag - getter renderedBuffer - method constructor -interface OfflineAudioContext : BaseAudioContext - attribute @@toStringTag - getter length - getter oncomplete - method constructor - method resume - method startRendering - method suspend - setter oncomplete -interface OffscreenCanvas : EventTarget - attribute @@toStringTag - getter height - getter width - method constructor - method convertToBlob - method getContext - method transferToImageBitmap - setter height - setter width -interface OffscreenCanvasRenderingContext2D - attribute @@toStringTag - getter canvas - getter direction - getter fillStyle - getter filter - getter font - getter globalAlpha - getter globalCompositeOperation - getter imageSmoothingEnabled - getter imageSmoothingQuality - getter lineCap - getter lineDashOffset - getter lineJoin - getter lineWidth - getter miterLimit - getter shadowBlur - getter shadowColor - getter shadowOffsetX - getter shadowOffsetY - getter strokeStyle - getter textAlign - getter textBaseline - method arc - method arcTo - method beginPath - method bezierCurveTo - method clearRect - method clip - method closePath - method commit - method constructor - method createImageData - method createLinearGradient - method createPattern - method createRadialGradient - method drawImage - method ellipse - method fill - method fillRect - method fillText - method getImageData - method getLineDash - method getTransform - method isPointInPath - method isPointInStroke - method lineTo - method measureText - method moveTo - method putImageData - method quadraticCurveTo - method rect - method resetTransform - method restore - method rotate - method save - method scale - method setLineDash - method setTransform - method stroke - method strokeRect - method strokeText - method transform - method translate - setter direction - setter fillStyle - setter filter - setter font - setter globalAlpha - setter globalCompositeOperation - setter imageSmoothingEnabled - setter imageSmoothingQuality - setter lineCap - setter lineDashOffset - setter lineJoin - setter lineWidth - setter miterLimit - setter shadowBlur - setter shadowColor - setter shadowOffsetX - setter shadowOffsetY - setter strokeStyle - setter textAlign - setter textBaseline -interface Option - attribute @@toStringTag - getter defaultSelected - getter disabled - getter form - getter index - getter label - getter selected - getter text - getter value - method constructor - setter defaultSelected - setter disabled - setter label - setter selected - setter text - setter value -interface OrientationSensor : Sensor - attribute @@toStringTag - getter quaternion - method constructor - method populateMatrix -interface OscillatorNode : AudioScheduledSourceNode - attribute @@toStringTag - getter detune - getter frequency - getter type - method constructor - method setPeriodicWave - setter type -interface OverconstrainedError - attribute @@toStringTag - getter constraint - getter message - getter name - method constructor -interface OverscrollEvent : Event - attribute @@toStringTag - getter deltaX - getter deltaY - method constructor -interface PageTransitionEvent : Event - attribute @@toStringTag - getter persisted - method constructor -interface PannerNode : AudioNode - attribute @@toStringTag - getter coneInnerAngle - getter coneOuterAngle - getter coneOuterGain - getter distanceModel - getter maxDistance - getter orientationX - getter orientationY - getter orientationZ - getter panningModel - getter positionX - getter positionY - getter positionZ - getter refDistance - getter rolloffFactor - method constructor - method setOrientation - method setPosition - setter coneInnerAngle - setter coneOuterAngle - setter coneOuterGain - setter distanceModel - setter maxDistance - setter panningModel - setter refDistance - setter rolloffFactor -interface PasswordCredential : Credential - attribute @@toStringTag - getter iconURL - getter name - getter password - method constructor -interface Path2D - attribute @@toStringTag - method addPath - method arc - method arcTo - method bezierCurveTo - method closePath - method constructor - method ellipse - method lineTo - method moveTo - method quadraticCurveTo - method rect -interface PaymentAddress - attribute @@toStringTag - getter addressLine - getter city - getter country - getter dependentLocality - getter organization - getter phone - getter postalCode - getter recipient - getter region - getter sortingCode - method constructor - method toJSON -interface PaymentInstruments - attribute @@toStringTag - method clear - method constructor - method delete - method get - method has - method keys - method set -interface PaymentManager - attribute @@toStringTag - getter instruments - getter userHint - method constructor - method enableDelegations - setter userHint -interface PaymentMethodChangeEvent : PaymentRequestUpdateEvent - attribute @@toStringTag - getter methodDetails - getter methodName - method constructor -interface PaymentRequest : EventTarget - attribute @@toStringTag - getter id - getter onpaymentmethodchange - getter onshippingaddresschange - getter onshippingoptionchange - getter shippingAddress - getter shippingOption - getter shippingType - method abort - method canMakePayment - method constructor - method hasEnrolledInstrument - method show - setter onpaymentmethodchange - setter onshippingaddresschange - setter onshippingoptionchange -interface PaymentRequestUpdateEvent : Event - attribute @@toStringTag - method constructor - method updateWith -interface PaymentResponse : EventTarget - attribute @@toStringTag - getter details - getter methodName - getter onpayerdetailchange - getter payerEmail - getter payerName - getter payerPhone - getter requestId - getter shippingAddress - getter shippingOption - method complete - method constructor - method retry - method toJSON - setter onpayerdetailchange -interface Performance : EventTarget - attribute @@toStringTag - getter memory - getter navigation - getter onresourcetimingbufferfull - getter timeOrigin - getter timing - method clearMarks - method clearMeasures - method clearResourceTimings - method constructor - method getEntries - method getEntriesByName - method getEntriesByType - method mark - method measure - method measureMemory - method now - method profile - method setResourceTimingBufferSize - method toJSON - setter onresourcetimingbufferfull -interface PerformanceElementTiming : PerformanceEntry - attribute @@toStringTag - getter element - getter id - getter identifier - getter intersectionRect - getter loadTime - getter naturalHeight - getter naturalWidth - getter renderTime - getter url - method constructor - method toJSON -interface PerformanceEntry - attribute @@toStringTag - getter duration - getter entryType - getter name - getter startTime - method constructor - method toJSON -interface PerformanceEventTiming : PerformanceEntry - attribute @@toStringTag - getter cancelable - getter processingEnd - getter processingStart - method constructor - method toJSON -interface PerformanceLongTaskTiming : PerformanceEntry - attribute @@toStringTag - getter attribution - method constructor - method toJSON -interface PerformanceMark : PerformanceEntry - attribute @@toStringTag - getter detail - method constructor -interface PerformanceMeasure : PerformanceEntry - attribute @@toStringTag - getter detail - method constructor -interface PerformanceNavigation - attribute @@toStringTag - attribute TYPE_BACK_FORWARD - attribute TYPE_NAVIGATE - attribute TYPE_RELOAD - attribute TYPE_RESERVED - getter redirectCount - getter type - method constructor - method toJSON -interface PerformanceNavigationTiming : PerformanceResourceTiming - attribute @@toStringTag - getter domComplete - getter domContentLoadedEventEnd - getter domContentLoadedEventStart - getter domInteractive - getter loadEventEnd - getter loadEventStart - getter redirectCount - getter type - getter unloadEventEnd - getter unloadEventStart - method constructor - method toJSON -interface PerformanceObserver - static getter supportedEntryTypes - attribute @@toStringTag - method constructor - method disconnect - method observe - method takeRecords -interface PerformanceObserverEntryList - attribute @@toStringTag - method constructor - method getEntries - method getEntriesByName - method getEntriesByType -interface PerformancePaintTiming : PerformanceEntry - attribute @@toStringTag - method constructor -interface PerformanceResourceTiming : PerformanceEntry - attribute @@toStringTag - getter connectEnd - getter connectStart - getter decodedBodySize - getter domainLookupEnd - getter domainLookupStart - getter encodedBodySize - getter fetchStart - getter initiatorType - getter nextHopProtocol - getter redirectEnd - getter redirectStart - getter requestStart - getter responseEnd - getter responseStart - getter secureConnectionStart - getter serverTiming - getter transferSize - getter workerStart - getter workerTiming - method constructor - method toJSON -interface PerformanceServerTiming - attribute @@toStringTag - getter description - getter duration - getter name - method constructor - method toJSON -interface PerformanceTiming - attribute @@toStringTag - getter connectEnd - getter connectStart - getter domComplete - getter domContentLoadedEventEnd - getter domContentLoadedEventStart - getter domInteractive - getter domLoading - getter domainLookupEnd - getter domainLookupStart - getter fetchStart - getter loadEventEnd - getter loadEventStart - getter navigationStart - getter redirectEnd - getter redirectStart - getter requestStart - getter responseEnd - getter responseStart - getter secureConnectionStart - getter unloadEventEnd - getter unloadEventStart - method constructor - method toJSON -interface PeriodicSyncManager - attribute @@toStringTag - method constructor - method getTags - method register - method unregister -interface PeriodicWave - attribute @@toStringTag - method constructor -interface PermissionStatus : EventTarget - attribute @@toStringTag - getter onchange - getter state - method constructor - setter onchange -interface Permissions - attribute @@toStringTag - method constructor - method query - method request - method requestAll - method revoke -interface PhotoCapabilities - attribute @@toStringTag - getter fillLightMode - getter imageHeight - getter imageWidth - getter redEyeReduction - method constructor -interface PictureInPictureWindow : EventTarget - attribute @@toStringTag - getter height - getter onresize - getter width - method constructor - setter onresize -interface Plugin - attribute @@toStringTag - getter description - getter filename - getter length - getter name - method @@iterator - method constructor - method item - method namedItem -interface PluginArray - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item - method namedItem - method refresh -interface PointerEvent : MouseEvent - attribute @@toStringTag - getter height - getter isPrimary - getter pointerId - getter pointerType - getter pressure - getter tangentialPressure - getter tiltX - getter tiltY - getter twist - getter width - method constructor - method getCoalescedEvents - method getPredictedEvents -interface PopStateEvent : Event - attribute @@toStringTag - getter state - method constructor -interface PortalActivateEvent : Event - attribute @@toStringTag - getter data - method adoptPredecessor - method constructor -interface PortalHost : EventTarget - attribute @@toStringTag - getter onmessage - getter onmessageerror - method constructor - method postMessage - setter onmessage - setter onmessageerror -interface Presentation - attribute @@toStringTag - getter defaultRequest - getter receiver - method constructor - setter defaultRequest -interface PresentationAvailability : EventTarget - attribute @@toStringTag - getter onchange - getter value - method constructor - setter onchange -interface PresentationConnection : EventTarget - attribute @@toStringTag - getter binaryType - getter id - getter onclose - getter onconnect - getter onmessage - getter onterminate - getter state - getter url - method close - method constructor - method send - method terminate - setter binaryType - setter onclose - setter onconnect - setter onmessage - setter onterminate -interface PresentationConnectionAvailableEvent : Event - attribute @@toStringTag - getter connection - method constructor -interface PresentationConnectionCloseEvent : Event - attribute @@toStringTag - getter message - getter reason - method constructor -interface PresentationConnectionList : EventTarget - attribute @@toStringTag - getter connections - getter onconnectionavailable - method constructor - setter onconnectionavailable -interface PresentationReceiver - attribute @@toStringTag - getter connectionList - method constructor -interface PresentationRequest : EventTarget - attribute @@toStringTag - getter onconnectionavailable - method constructor - method getAvailability - method reconnect - method start - setter onconnectionavailable -interface ProcessingInstruction : CharacterData - attribute @@toStringTag - getter sheet - getter target - method constructor -interface Profiler - attribute @@toStringTag - getter sampleInterval - getter stopped - method constructor - method stop -interface ProgressEvent : Event - attribute @@toStringTag - getter lengthComputable - getter loaded - getter total - method constructor -interface PromiseRejectionEvent : Event - attribute @@toStringTag - getter promise - getter reason - method constructor -interface PublicKeyCredential : Credential - static method isUserVerifyingPlatformAuthenticatorAvailable - attribute @@toStringTag - getter rawId - getter response - method constructor - method getClientExtensionResults -interface PushManager - static getter supportedContentEncodings - attribute @@toStringTag - method constructor - method getSubscription - method permissionState - method subscribe -interface PushSubscription - attribute @@toStringTag - getter endpoint - getter expirationTime - getter options - method constructor - method getKey - method toJSON - method unsubscribe -interface PushSubscriptionOptions - attribute @@toStringTag - getter applicationServerKey - getter userVisibleOnly - method constructor -interface QuicTransport - attribute @@toStringTag - method close - method constructor -interface RTCCertificate - attribute @@toStringTag - getter expires - method constructor - method getFingerprints -interface RTCDTMFSender : EventTarget - attribute @@toStringTag - getter canInsertDTMF - getter ontonechange - getter toneBuffer - method constructor - method insertDTMF - setter ontonechange -interface RTCDTMFToneChangeEvent : Event - attribute @@toStringTag - getter tone - method constructor -interface RTCDataChannel : EventTarget - attribute @@toStringTag - getter binaryType - getter bufferedAmount - getter bufferedAmountLowThreshold - getter id - getter label - getter maxPacketLifeTime - getter maxRetransmits - getter negotiated - getter onbufferedamountlow - getter onclose - getter onerror - getter onmessage - getter onopen - getter ordered - getter protocol - getter readyState - getter reliable - method close - method constructor - method send - setter binaryType - setter bufferedAmountLowThreshold - setter onbufferedamountlow - setter onclose - setter onerror - setter onmessage - setter onopen -interface RTCDataChannelEvent : Event - attribute @@toStringTag - getter channel - method constructor -interface RTCDtlsTransport : EventTarget - attribute @@toStringTag - getter iceTransport - getter onerror - getter onstatechange - getter state - method constructor - method getRemoteCertificates - setter onerror - setter onstatechange -interface RTCError : DOMException - attribute @@toStringTag - getter errorDetail - getter httpRequestStatusCode - getter receivedAlert - getter sctpCauseCode - getter sdpLineNumber - getter sentAlert - method constructor -interface RTCErrorEvent : Event - attribute @@toStringTag - getter error - method constructor -interface RTCIceCandidate - attribute @@toStringTag - getter address - getter candidate - getter component - getter foundation - getter port - getter priority - getter protocol - getter relatedAddress - getter relatedPort - getter sdpMLineIndex - getter sdpMid - getter tcpType - getter type - getter usernameFragment - method constructor - method toJSON -interface RTCIceTransport : EventTarget - attribute @@toStringTag - getter gatheringState - getter ongatheringstatechange - getter onicecandidate - getter onselectedcandidatepairchange - getter onstatechange - getter role - getter state - method addRemoteCandidate - method constructor - method gather - method getLocalCandidates - method getLocalParameters - method getRemoteCandidates - method getRemoteParameters - method getSelectedCandidatePair - method start - method stop - setter ongatheringstatechange - setter onicecandidate - setter onselectedcandidatepairchange - setter onstatechange -interface RTCPeerConnection : EventTarget - static method generateCertificate - attribute @@toStringTag - getter connectionState - getter currentLocalDescription - getter currentRemoteDescription - getter iceConnectionState - getter iceGatheringState - getter localDescription - getter onaddstream - getter onconnectionstatechange - getter ondatachannel - getter onicecandidate - getter onicecandidateerror - getter oniceconnectionstatechange - getter onicegatheringstatechange - getter onnegotiationneeded - getter onremovestream - getter onsignalingstatechange - getter ontrack - getter pendingLocalDescription - getter pendingRemoteDescription - getter remoteDescription - getter sctp - getter signalingState - method addIceCandidate - method addStream - method addTrack - method addTransceiver - method close - method constructor - method createAnswer - method createDTMFSender - method createDataChannel - method createOffer - method getConfiguration - method getLocalStreams - method getReceivers - method getRemoteStreams - method getSenders - method getStats - method getTransceivers - method removeStream - method removeTrack - method restartIce - method setConfiguration - method setLocalDescription - method setRemoteDescription - setter onaddstream - setter onconnectionstatechange - setter ondatachannel - setter onicecandidate - setter onicecandidateerror - setter oniceconnectionstatechange - setter onicegatheringstatechange - setter onnegotiationneeded - setter onremovestream - setter onsignalingstatechange - setter ontrack -interface RTCPeerConnectionIceErrorEvent : Event - attribute @@toStringTag - getter errorCode - getter errorText - getter hostCandidate - getter url - method constructor -interface RTCPeerConnectionIceEvent : Event - attribute @@toStringTag - getter candidate - method constructor -interface RTCQuicStream : EventTarget - attribute @@toStringTag - getter maxReadBufferedAmount - getter maxWriteBufferedAmount - getter onstatechange - getter readBufferedAmount - getter state - getter transport - getter writeBufferedAmount - method constructor - method readInto - method reset - method waitForReadable - method waitForWriteBufferedAmountBelow - method write - setter onstatechange -interface RTCQuicStreamEvent : Event - attribute @@toStringTag - getter stream - method constructor -interface RTCQuicTransport : EventTarget - attribute @@toStringTag - getter maxDatagramLength - getter onerror - getter onquicstream - getter onstatechange - getter state - getter transport - method connect - method constructor - method createStream - method getKey - method getStats - method listen - method readyToSendDatagram - method receiveDatagrams - method sendDatagram - method stop - setter onerror - setter onquicstream - setter onstatechange -interface RTCRtpReceiver - static method getCapabilities - attribute @@toStringTag - getter playoutDelayHint - getter rtcpTransport - getter track - getter transport - method constructor - method getContributingSources - method getParameters - method getStats - method getSynchronizationSources - setter playoutDelayHint -interface RTCRtpSender - static method getCapabilities - attribute @@toStringTag - getter dtmf - getter rtcpTransport - getter track - getter transport - method constructor - method getParameters - method getStats - method replaceTrack - method setParameters - method setStreams -interface RTCRtpTransceiver - attribute @@toStringTag - getter currentDirection - getter direction - getter mid - getter receiver - getter sender - getter stopped - method constructor - method setCodecPreferences - setter direction -interface RTCSctpTransport : EventTarget - attribute @@toStringTag - getter maxChannels - getter maxMessageSize - getter onstatechange - getter state - getter transport - method constructor - setter onstatechange -interface RTCSessionDescription - attribute @@toStringTag - getter sdp - getter type - method constructor - method toJSON - setter sdp - setter type -interface RTCStatsReport - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method has - method keys - method values -interface RTCTrackEvent : Event - attribute @@toStringTag - getter receiver - getter streams - getter track - getter transceiver - method constructor -interface RadioNodeList : NodeList - attribute @@toStringTag - getter value - method constructor - setter value -interface Range - attribute @@toStringTag - attribute END_TO_END - attribute END_TO_START - attribute START_TO_END - attribute START_TO_START - getter collapsed - getter commonAncestorContainer - getter endContainer - getter endOffset - getter startContainer - getter startOffset - method cloneContents - method cloneRange - method collapse - method compareBoundaryPoints - method comparePoint - method constructor - method createContextualFragment - method deleteContents - method detach - method expand - method extractContents - method getBoundingClientRect - method getClientRects - method insertNode - method intersectsNode - method isPointInRange - method selectNode - method selectNodeContents - method setEnd - method setEndAfter - method setEndBefore - method setStart - method setStartAfter - method setStartBefore - method surroundContents - method toString -interface ReadableStream - attribute @@toStringTag - getter locked - method cancel - method constructor - method getReader - method pipeThrough - method pipeTo - method tee -interface ReadableStreamDefaultReader - attribute @@toStringTag - getter closed - method cancel - method constructor - method read - method releaseLock -interface RelativeOrientationSensor : OrientationSensor - attribute @@toStringTag - method constructor -interface RemotePlayback : EventTarget - attribute @@toStringTag - getter onconnect - getter onconnecting - getter ondisconnect - getter state - method cancelWatchAvailability - method constructor - method prompt - method watchAvailability - setter onconnect - setter onconnecting - setter ondisconnect -interface RenderSubtreeActivationEvent : Event - attribute @@toStringTag - getter activatedElement - method constructor -interface ReportingObserver - attribute @@toStringTag - method constructor - method disconnect - method observe - method takeRecords -interface Request - attribute @@toStringTag - getter bodyUsed - getter cache - getter credentials - getter destination - getter headers - getter integrity - getter isHistoryNavigation - getter keepalive - getter method - getter mode - getter redirect - getter referrer - getter referrerPolicy - getter signal - getter url - method arrayBuffer - method blob - method clone - method constructor - method formData - method json - method text -interface ResizeObserver - attribute @@toStringTag - method constructor - method disconnect - method observe - method unobserve -interface ResizeObserverEntry - attribute @@toStringTag - getter contentRect - getter target - method constructor -interface Response - static method error - static method redirect - attribute @@toStringTag - getter body - getter bodyUsed - getter headers - getter ok - getter redirected - getter status - getter statusText - getter type - getter url - method arrayBuffer - method blob - method clone - method constructor - method formData - method json - method text -interface SMS - attribute @@toStringTag - getter content - method constructor -interface SMSReceiver - attribute @@toStringTag - method constructor - method receive -interface SVGAElement : SVGGraphicsElement - attribute @@toStringTag - getter href - getter target - method constructor -interface SVGAngle - attribute @@toStringTag - attribute SVG_ANGLETYPE_DEG - attribute SVG_ANGLETYPE_GRAD - attribute SVG_ANGLETYPE_RAD - attribute SVG_ANGLETYPE_UNKNOWN - attribute SVG_ANGLETYPE_UNSPECIFIED - getter unitType - getter value - getter valueAsString - getter valueInSpecifiedUnits - method constructor - method convertToSpecifiedUnits - method newValueSpecifiedUnits - setter value - setter valueAsString - setter valueInSpecifiedUnits -interface SVGAnimateElement : SVGAnimationElement - attribute @@toStringTag - method constructor -interface SVGAnimateMotionElement : SVGAnimationElement - attribute @@toStringTag - method constructor -interface SVGAnimateTransformElement : SVGAnimationElement - attribute @@toStringTag - method constructor -interface SVGAnimatedAngle - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedBoolean - attribute @@toStringTag - getter animVal - getter baseVal - method constructor - setter baseVal -interface SVGAnimatedEnumeration - attribute @@toStringTag - getter animVal - getter baseVal - method constructor - setter baseVal -interface SVGAnimatedInteger - attribute @@toStringTag - getter animVal - getter baseVal - method constructor - setter baseVal -interface SVGAnimatedLength - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedLengthList - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedNumber - attribute @@toStringTag - getter animVal - getter baseVal - method constructor - setter baseVal -interface SVGAnimatedNumberList - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedPreserveAspectRatio - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedRect - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimatedString - attribute @@toStringTag - getter animVal - getter baseVal - method constructor - setter baseVal -interface SVGAnimatedTransformList - attribute @@toStringTag - getter animVal - getter baseVal - method constructor -interface SVGAnimationElement : SVGElement - attribute @@toStringTag - getter onbegin - getter onend - getter onrepeat - getter requiredExtensions - getter systemLanguage - getter targetElement - method beginElement - method beginElementAt - method constructor - method endElement - method endElementAt - method getCurrentTime - method getSimpleDuration - method getStartTime - setter onbegin - setter onend - setter onrepeat -interface SVGCircleElement : SVGGeometryElement - attribute @@toStringTag - getter cx - getter cy - getter r - method constructor -interface SVGClipPathElement : SVGGraphicsElement - attribute @@toStringTag - getter clipPathUnits - method constructor -interface SVGComponentTransferFunctionElement : SVGElement - attribute @@toStringTag - attribute SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE - attribute SVG_FECOMPONENTTRANSFER_TYPE_GAMMA - attribute SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY - attribute SVG_FECOMPONENTTRANSFER_TYPE_LINEAR - attribute SVG_FECOMPONENTTRANSFER_TYPE_TABLE - attribute SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN - getter amplitude - getter exponent - getter intercept - getter offset - getter slope - getter tableValues - getter type - method constructor -interface SVGDefsElement : SVGGraphicsElement - attribute @@toStringTag - method constructor -interface SVGDescElement : SVGElement - attribute @@toStringTag - method constructor -interface SVGDiscardElement : SVGElement - attribute @@toStringTag - method constructor -interface SVGElement : Element - attribute @@toStringTag - getter autofocus - getter className - getter dataset - getter nonce - getter onabort - getter onactivateinvisible - getter onanimationend - getter onanimationiteration - getter onanimationstart - getter onauxclick - getter onblur - getter oncancel - getter oncanplay - getter oncanplaythrough - getter onchange - getter onclick - getter onclose - getter oncontextmenu - getter oncopy - getter oncuechange - getter oncut - getter ondblclick - getter ondrag - getter ondragend - getter ondragenter - getter ondragleave - getter ondragover - getter ondragstart - getter ondrop - getter ondurationchange - getter onemptied - getter onended - getter onerror - getter onfocus - getter onformdata - getter ongotpointercapture - getter oninput - getter oninvalid - getter onkeydown - getter onkeypress - getter onkeyup - getter onload - getter onloadeddata - getter onloadedmetadata - getter onloadstart - getter onlostpointercapture - getter onmousedown - getter onmouseenter - getter onmouseleave - getter onmousemove - getter onmouseout - getter onmouseover - getter onmouseup - getter onmousewheel - getter onoverscroll - getter onpaste - getter onpause - getter onplay - getter onplaying - getter onpointercancel - getter onpointerdown - getter onpointerenter - getter onpointerleave - getter onpointermove - getter onpointerout - getter onpointerover - getter onpointerrawupdate - getter onpointerup - getter onprogress - getter onratechange - getter onrendersubtreeactivation - getter onreset - getter onresize - getter onscroll - getter onscrollend - getter onseeked - getter onseeking - getter onselect - getter onselectionchange - getter onselectstart - getter onstalled - getter onsubmit - getter onsuspend - getter ontimeupdate - getter ontoggle - getter ontouchcancel - getter ontouchend - getter ontouchmove - getter ontouchstart - getter ontransitionend - getter onvolumechange - getter onwaiting - getter onwheel - getter ownerSVGElement - getter style - getter tabIndex - getter viewportElement - method blur - method constructor - method focus - setter autofocus - setter nonce - setter onabort - setter onactivateinvisible - setter onanimationend - setter onanimationiteration - setter onanimationstart - setter onauxclick - setter onblur - setter oncancel - setter oncanplay - setter oncanplaythrough - setter onchange - setter onclick - setter onclose - setter oncontextmenu - setter oncopy - setter oncuechange - setter oncut - setter ondblclick - setter ondrag - setter ondragend - setter ondragenter - setter ondragleave - setter ondragover - setter ondragstart - setter ondrop - setter ondurationchange - setter onemptied - setter onended - setter onerror - setter onfocus - setter onformdata - setter ongotpointercapture - setter oninput - setter oninvalid - setter onkeydown - setter onkeypress - setter onkeyup - setter onload - setter onloadeddata - setter onloadedmetadata - setter onloadstart - setter onlostpointercapture - setter onmousedown - setter onmouseenter - setter onmouseleave - setter onmousemove - setter onmouseout - setter onmouseover - setter onmouseup - setter onmousewheel - setter onoverscroll - setter onpaste - setter onpause - setter onplay - setter onplaying - setter onpointercancel - setter onpointerdown - setter onpointerenter - setter onpointerleave - setter onpointermove - setter onpointerout - setter onpointerover - setter onpointerrawupdate - setter onpointerup - setter onprogress - setter onratechange - setter onrendersubtreeactivation - setter onreset - setter onresize - setter onscroll - setter onscrollend - setter onseeked - setter onseeking - setter onselect - setter onselectionchange - setter onselectstart - setter onstalled - setter onsubmit - setter onsuspend - setter ontimeupdate - setter ontoggle - setter ontouchcancel - setter ontouchend - setter ontouchmove - setter ontouchstart - setter ontransitionend - setter onvolumechange - setter onwaiting - setter onwheel - setter style - setter tabIndex -interface SVGEllipseElement : SVGGeometryElement - attribute @@toStringTag - getter cx - getter cy - getter rx - getter ry - method constructor -interface SVGFEBlendElement : SVGElement - attribute @@toStringTag - attribute SVG_FEBLEND_MODE_COLOR - attribute SVG_FEBLEND_MODE_COLOR_BURN - attribute SVG_FEBLEND_MODE_COLOR_DODGE - attribute SVG_FEBLEND_MODE_DARKEN - attribute SVG_FEBLEND_MODE_DIFFERENCE - attribute SVG_FEBLEND_MODE_EXCLUSION - attribute SVG_FEBLEND_MODE_HARD_LIGHT - attribute SVG_FEBLEND_MODE_HUE - attribute SVG_FEBLEND_MODE_LIGHTEN - attribute SVG_FEBLEND_MODE_LUMINOSITY - attribute SVG_FEBLEND_MODE_MULTIPLY - attribute SVG_FEBLEND_MODE_NORMAL - attribute SVG_FEBLEND_MODE_OVERLAY - attribute SVG_FEBLEND_MODE_SATURATION - attribute SVG_FEBLEND_MODE_SCREEN - attribute SVG_FEBLEND_MODE_SOFT_LIGHT - attribute SVG_FEBLEND_MODE_UNKNOWN - getter height - getter in1 - getter in2 - getter mode - getter result - getter width - getter x - getter y - method constructor -interface SVGFEColorMatrixElement : SVGElement - attribute @@toStringTag - attribute SVG_FECOLORMATRIX_TYPE_HUEROTATE - attribute SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA - attribute SVG_FECOLORMATRIX_TYPE_MATRIX - attribute SVG_FECOLORMATRIX_TYPE_SATURATE - attribute SVG_FECOLORMATRIX_TYPE_UNKNOWN - getter height - getter in1 - getter result - getter type - getter values - getter width - getter x - getter y - method constructor -interface SVGFEComponentTransferElement : SVGElement - attribute @@toStringTag - getter height - getter in1 - getter result - getter width - getter x - getter y - method constructor -interface SVGFECompositeElement : SVGElement - attribute @@toStringTag - attribute SVG_FECOMPOSITE_OPERATOR_ARITHMETIC - attribute SVG_FECOMPOSITE_OPERATOR_ATOP - attribute SVG_FECOMPOSITE_OPERATOR_IN - attribute SVG_FECOMPOSITE_OPERATOR_OUT - attribute SVG_FECOMPOSITE_OPERATOR_OVER - attribute SVG_FECOMPOSITE_OPERATOR_UNKNOWN - attribute SVG_FECOMPOSITE_OPERATOR_XOR - getter height - getter in1 - getter in2 - getter k1 - getter k2 - getter k3 - getter k4 - getter operator - getter result - getter width - getter x - getter y - method constructor -interface SVGFEConvolveMatrixElement : SVGElement - attribute @@toStringTag - attribute SVG_EDGEMODE_DUPLICATE - attribute SVG_EDGEMODE_NONE - attribute SVG_EDGEMODE_UNKNOWN - attribute SVG_EDGEMODE_WRAP - getter bias - getter divisor - getter edgeMode - getter height - getter in1 - getter kernelMatrix - getter kernelUnitLengthX - getter kernelUnitLengthY - getter orderX - getter orderY - getter preserveAlpha - getter result - getter targetX - getter targetY - getter width - getter x - getter y - method constructor -interface SVGFEDiffuseLightingElement : SVGElement - attribute @@toStringTag - getter diffuseConstant - getter height - getter in1 - getter kernelUnitLengthX - getter kernelUnitLengthY - getter result - getter surfaceScale - getter width - getter x - getter y - method constructor -interface SVGFEDisplacementMapElement : SVGElement - attribute @@toStringTag - attribute SVG_CHANNEL_A - attribute SVG_CHANNEL_B - attribute SVG_CHANNEL_G - attribute SVG_CHANNEL_R - attribute SVG_CHANNEL_UNKNOWN - getter height - getter in1 - getter in2 - getter result - getter scale - getter width - getter x - getter xChannelSelector - getter y - getter yChannelSelector - method constructor -interface SVGFEDistantLightElement : SVGElement - attribute @@toStringTag - getter azimuth - getter elevation - method constructor -interface SVGFEDropShadowElement : SVGElement - attribute @@toStringTag - getter dx - getter dy - getter height - getter in1 - getter result - getter stdDeviationX - getter stdDeviationY - getter width - getter x - getter y - method constructor - method setStdDeviation -interface SVGFEFloodElement : SVGElement - attribute @@toStringTag - getter height - getter result - getter width - getter x - getter y - method constructor -interface SVGFEFuncAElement : SVGComponentTransferFunctionElement - attribute @@toStringTag - method constructor -interface SVGFEFuncBElement : SVGComponentTransferFunctionElement - attribute @@toStringTag - method constructor -interface SVGFEFuncGElement : SVGComponentTransferFunctionElement - attribute @@toStringTag - method constructor -interface SVGFEFuncRElement : SVGComponentTransferFunctionElement - attribute @@toStringTag - method constructor -interface SVGFEGaussianBlurElement : SVGElement - attribute @@toStringTag - getter height - getter in1 - getter result - getter stdDeviationX - getter stdDeviationY - getter width - getter x - getter y - method constructor - method setStdDeviation -interface SVGFEImageElement : SVGElement - attribute @@toStringTag - getter height - getter href - getter preserveAspectRatio - getter result - getter width - getter x - getter y - method constructor -interface SVGFEMergeElement : SVGElement - attribute @@toStringTag - getter height - getter result - getter width - getter x - getter y - method constructor -interface SVGFEMergeNodeElement : SVGElement - attribute @@toStringTag - getter in1 - method constructor -interface SVGFEMorphologyElement : SVGElement - attribute @@toStringTag - attribute SVG_MORPHOLOGY_OPERATOR_DILATE - attribute SVG_MORPHOLOGY_OPERATOR_ERODE - attribute SVG_MORPHOLOGY_OPERATOR_UNKNOWN - getter height - getter in1 - getter operator - getter radiusX - getter radiusY - getter result - getter width - getter x - getter y - method constructor -interface SVGFEOffsetElement : SVGElement - attribute @@toStringTag - getter dx - getter dy - getter height - getter in1 - getter result - getter width - getter x - getter y - method constructor -interface SVGFEPointLightElement : SVGElement - attribute @@toStringTag - getter x - getter y - getter z - method constructor -interface SVGFESpecularLightingElement : SVGElement - attribute @@toStringTag - getter height - getter in1 - getter kernelUnitLengthX - getter kernelUnitLengthY - getter result - getter specularConstant - getter specularExponent - getter surfaceScale - getter width - getter x - getter y - method constructor -interface SVGFESpotLightElement : SVGElement - attribute @@toStringTag - getter limitingConeAngle - getter pointsAtX - getter pointsAtY - getter pointsAtZ - getter specularExponent - getter x - getter y - getter z - method constructor -interface SVGFETileElement : SVGElement - attribute @@toStringTag - getter height - getter in1 - getter result - getter width - getter x - getter y - method constructor -interface SVGFETurbulenceElement : SVGElement - attribute @@toStringTag - attribute SVG_STITCHTYPE_NOSTITCH - attribute SVG_STITCHTYPE_STITCH - attribute SVG_STITCHTYPE_UNKNOWN - attribute SVG_TURBULENCE_TYPE_FRACTALNOISE - attribute SVG_TURBULENCE_TYPE_TURBULENCE - attribute SVG_TURBULENCE_TYPE_UNKNOWN - getter baseFrequencyX - getter baseFrequencyY - getter height - getter numOctaves - getter result - getter seed - getter stitchTiles - getter type - getter width - getter x - getter y - method constructor -interface SVGFilterElement : SVGElement - attribute @@toStringTag - getter filterUnits - getter height - getter href - getter primitiveUnits - getter width - getter x - getter y - method constructor -interface SVGForeignObjectElement : SVGGraphicsElement - attribute @@toStringTag - getter height - getter width - getter x - getter y - method constructor -interface SVGGElement : SVGGraphicsElement - attribute @@toStringTag - method constructor -interface SVGGeometryElement : SVGGraphicsElement - attribute @@toStringTag - getter pathLength - method constructor - method getPointAtLength - method getTotalLength - method isPointInFill - method isPointInStroke -interface SVGGradientElement : SVGElement - attribute @@toStringTag - attribute SVG_SPREADMETHOD_PAD - attribute SVG_SPREADMETHOD_REFLECT - attribute SVG_SPREADMETHOD_REPEAT - attribute SVG_SPREADMETHOD_UNKNOWN - getter gradientTransform - getter gradientUnits - getter href - getter spreadMethod - method constructor -interface SVGGraphicsElement : SVGElement - attribute @@toStringTag - getter farthestViewportElement - getter nearestViewportElement - getter requiredExtensions - getter systemLanguage - getter transform - method constructor - method getBBox - method getCTM - method getScreenCTM -interface SVGImageElement : SVGGraphicsElement - attribute @@toStringTag - getter decoding - getter height - getter href - getter preserveAspectRatio - getter width - getter x - getter y - method constructor - method decode - setter decoding -interface SVGLength - attribute @@toStringTag - attribute SVG_LENGTHTYPE_CM - attribute SVG_LENGTHTYPE_EMS - attribute SVG_LENGTHTYPE_EXS - attribute SVG_LENGTHTYPE_IN - attribute SVG_LENGTHTYPE_MM - attribute SVG_LENGTHTYPE_NUMBER - attribute SVG_LENGTHTYPE_PC - attribute SVG_LENGTHTYPE_PERCENTAGE - attribute SVG_LENGTHTYPE_PT - attribute SVG_LENGTHTYPE_PX - attribute SVG_LENGTHTYPE_UNKNOWN - getter unitType - getter value - getter valueAsString - getter valueInSpecifiedUnits - method constructor - method convertToSpecifiedUnits - method newValueSpecifiedUnits - setter value - setter valueAsString - setter valueInSpecifiedUnits -interface SVGLengthList - attribute @@toStringTag - getter length - getter numberOfItems - method @@iterator - method appendItem - method clear - method constructor - method getItem - method initialize - method insertItemBefore - method removeItem - method replaceItem -interface SVGLineElement : SVGGeometryElement - attribute @@toStringTag - getter x1 - getter x2 - getter y1 - getter y2 - method constructor -interface SVGLinearGradientElement : SVGGradientElement - attribute @@toStringTag - getter x1 - getter x2 - getter y1 - getter y2 - method constructor -interface SVGMPathElement : SVGElement - attribute @@toStringTag - getter href - method constructor -interface SVGMarkerElement : SVGElement - attribute @@toStringTag - attribute SVG_MARKERUNITS_STROKEWIDTH - attribute SVG_MARKERUNITS_UNKNOWN - attribute SVG_MARKERUNITS_USERSPACEONUSE - attribute SVG_MARKER_ORIENT_ANGLE - attribute SVG_MARKER_ORIENT_AUTO - attribute SVG_MARKER_ORIENT_UNKNOWN - getter markerHeight - getter markerUnits - getter markerWidth - getter orientAngle - getter orientType - getter preserveAspectRatio - getter refX - getter refY - getter viewBox - method constructor - method setOrientToAngle - method setOrientToAuto -interface SVGMaskElement : SVGElement - attribute @@toStringTag - getter height - getter maskContentUnits - getter maskUnits - getter requiredExtensions - getter systemLanguage - getter width - getter x - getter y - method constructor -interface SVGMatrix - attribute @@toStringTag - getter a - getter b - getter c - getter d - getter e - getter f - method constructor - method flipX - method flipY - method inverse - method multiply - method rotate - method rotateFromVector - method scale - method scaleNonUniform - method skewX - method skewY - method translate - setter a - setter b - setter c - setter d - setter e - setter f -interface SVGMetadataElement : SVGElement - attribute @@toStringTag - method constructor -interface SVGNumber - attribute @@toStringTag - getter value - method constructor - setter value -interface SVGNumberList - attribute @@toStringTag - getter length - getter numberOfItems - method @@iterator - method appendItem - method clear - method constructor - method getItem - method initialize - method insertItemBefore - method removeItem - method replaceItem -interface SVGPathElement : SVGGeometryElement - attribute @@toStringTag - method constructor -interface SVGPatternElement : SVGElement - attribute @@toStringTag - getter height - getter href - getter patternContentUnits - getter patternTransform - getter patternUnits - getter preserveAspectRatio - getter requiredExtensions - getter systemLanguage - getter viewBox - getter width - getter x - getter y - method constructor -interface SVGPoint - attribute @@toStringTag - getter x - getter y - method constructor - method matrixTransform - setter x - setter y -interface SVGPointList - attribute @@toStringTag - getter length - getter numberOfItems - method @@iterator - method appendItem - method clear - method constructor - method getItem - method initialize - method insertItemBefore - method removeItem - method replaceItem -interface SVGPolygonElement : SVGGeometryElement - attribute @@toStringTag - getter animatedPoints - getter points - method constructor -interface SVGPolylineElement : SVGGeometryElement - attribute @@toStringTag - getter animatedPoints - getter points - method constructor -interface SVGPreserveAspectRatio - attribute @@toStringTag - attribute SVG_MEETORSLICE_MEET - attribute SVG_MEETORSLICE_SLICE - attribute SVG_MEETORSLICE_UNKNOWN - attribute SVG_PRESERVEASPECTRATIO_NONE - attribute SVG_PRESERVEASPECTRATIO_UNKNOWN - attribute SVG_PRESERVEASPECTRATIO_XMAXYMAX - attribute SVG_PRESERVEASPECTRATIO_XMAXYMID - attribute SVG_PRESERVEASPECTRATIO_XMAXYMIN - attribute SVG_PRESERVEASPECTRATIO_XMIDYMAX - attribute SVG_PRESERVEASPECTRATIO_XMIDYMID - attribute SVG_PRESERVEASPECTRATIO_XMIDYMIN - attribute SVG_PRESERVEASPECTRATIO_XMINYMAX - attribute SVG_PRESERVEASPECTRATIO_XMINYMID - attribute SVG_PRESERVEASPECTRATIO_XMINYMIN - getter align - getter meetOrSlice - method constructor - setter align - setter meetOrSlice -interface SVGRadialGradientElement : SVGGradientElement - attribute @@toStringTag - getter cx - getter cy - getter fr - getter fx - getter fy - getter r - method constructor -interface SVGRect - attribute @@toStringTag - getter height - getter width - getter x - getter y - method constructor - setter height - setter width - setter x - setter y -interface SVGRectElement : SVGGeometryElement - attribute @@toStringTag - getter height - getter rx - getter ry - getter width - getter x - getter y - method constructor -interface SVGSVGElement : SVGGraphicsElement - attribute @@toStringTag - attribute SVG_ZOOMANDPAN_DISABLE - attribute SVG_ZOOMANDPAN_MAGNIFY - attribute SVG_ZOOMANDPAN_UNKNOWN - getter currentScale - getter currentTranslate - getter height - getter preserveAspectRatio - getter viewBox - getter width - getter x - getter y - getter zoomAndPan - method animationsPaused - method checkEnclosure - method checkIntersection - method constructor - method createSVGAngle - method createSVGLength - method createSVGMatrix - method createSVGNumber - method createSVGPoint - method createSVGRect - method createSVGTransform - method createSVGTransformFromMatrix - method deselectAll - method forceRedraw - method getCurrentTime - method getElementById - method getEnclosureList - method getIntersectionList - method pauseAnimations - method setCurrentTime - method suspendRedraw - method unpauseAnimations - method unsuspendRedraw - method unsuspendRedrawAll - setter currentScale - setter zoomAndPan -interface SVGScriptElement : SVGElement - attribute @@toStringTag - getter href - getter type - method constructor - setter type -interface SVGSetElement : SVGAnimationElement - attribute @@toStringTag - method constructor -interface SVGStopElement : SVGElement - attribute @@toStringTag - getter offset - method constructor -interface SVGStringList - attribute @@toStringTag - getter length - getter numberOfItems - method @@iterator - method appendItem - method clear - method constructor - method getItem - method initialize - method insertItemBefore - method removeItem - method replaceItem -interface SVGStyleElement : SVGElement - attribute @@toStringTag - getter disabled - getter media - getter sheet - getter title - getter type - method constructor - setter disabled - setter media - setter title - setter type -interface SVGSwitchElement : SVGGraphicsElement - attribute @@toStringTag - method constructor -interface SVGSymbolElement : SVGElement - attribute @@toStringTag - getter preserveAspectRatio - getter viewBox - method constructor -interface SVGTSpanElement : SVGTextPositioningElement - attribute @@toStringTag - method constructor -interface SVGTextContentElement : SVGGraphicsElement - attribute @@toStringTag - attribute LENGTHADJUST_SPACING - attribute LENGTHADJUST_SPACINGANDGLYPHS - attribute LENGTHADJUST_UNKNOWN - getter lengthAdjust - getter textLength - method constructor - method getCharNumAtPosition - method getComputedTextLength - method getEndPositionOfChar - method getExtentOfChar - method getNumberOfChars - method getRotationOfChar - method getStartPositionOfChar - method getSubStringLength - method selectSubString -interface SVGTextElement : SVGTextPositioningElement - attribute @@toStringTag - method constructor -interface SVGTextPathElement : SVGTextContentElement - attribute @@toStringTag - attribute TEXTPATH_METHODTYPE_ALIGN - attribute TEXTPATH_METHODTYPE_STRETCH - attribute TEXTPATH_METHODTYPE_UNKNOWN - attribute TEXTPATH_SPACINGTYPE_AUTO - attribute TEXTPATH_SPACINGTYPE_EXACT - attribute TEXTPATH_SPACINGTYPE_UNKNOWN - getter href - getter method - getter spacing - getter startOffset - method constructor -interface SVGTextPositioningElement : SVGTextContentElement - attribute @@toStringTag - getter dx - getter dy - getter rotate - getter x - getter y - method constructor -interface SVGTitleElement : SVGElement - attribute @@toStringTag - method constructor -interface SVGTransform - attribute @@toStringTag - attribute SVG_TRANSFORM_MATRIX - attribute SVG_TRANSFORM_ROTATE - attribute SVG_TRANSFORM_SCALE - attribute SVG_TRANSFORM_SKEWX - attribute SVG_TRANSFORM_SKEWY - attribute SVG_TRANSFORM_TRANSLATE - attribute SVG_TRANSFORM_UNKNOWN - getter angle - getter matrix - getter type - method constructor - method setMatrix - method setRotate - method setScale - method setSkewX - method setSkewY - method setTranslate -interface SVGTransformList - attribute @@toStringTag - getter length - getter numberOfItems - method @@iterator - method appendItem - method clear - method consolidate - method constructor - method createSVGTransformFromMatrix - method getItem - method initialize - method insertItemBefore - method removeItem - method replaceItem -interface SVGUnitTypes - attribute @@toStringTag - attribute SVG_UNIT_TYPE_OBJECTBOUNDINGBOX - attribute SVG_UNIT_TYPE_UNKNOWN - attribute SVG_UNIT_TYPE_USERSPACEONUSE - method constructor -interface SVGUseElement : SVGGraphicsElement - attribute @@toStringTag - getter height - getter href - getter width - getter x - getter y - method constructor -interface SVGViewElement : SVGElement - attribute @@toStringTag - attribute SVG_ZOOMANDPAN_DISABLE - attribute SVG_ZOOMANDPAN_MAGNIFY - attribute SVG_ZOOMANDPAN_UNKNOWN - getter preserveAspectRatio - getter viewBox - getter zoomAndPan - method constructor - setter zoomAndPan -interface Scheduler - attribute @@toStringTag - method constructor - method postTask -interface Scheduling - attribute @@toStringTag - method constructor - method isFramePending - method isInputPending -interface Screen - attribute @@toStringTag - getter availHeight - getter availLeft - getter availTop - getter availWidth - getter colorDepth - getter height - getter internal - getter left - getter name - getter orientation - getter pixelDepth - getter primary - getter scaleFactor - getter top - getter width - method constructor -interface ScreenManager - attribute @@toStringTag - method constructor - method getScreens -interface ScreenOrientation : EventTarget - attribute @@toStringTag - getter angle - getter onchange - getter type - method constructor - method lock - method unlock - setter onchange -interface ScriptProcessorNode : AudioNode - attribute @@toStringTag - getter bufferSize - getter onaudioprocess - method constructor - setter onaudioprocess -interface ScrollTimeline : AnimationTimeline - attribute @@toStringTag - getter endScrollOffset - getter fill - getter orientation - getter scrollSource - getter startScrollOffset - getter timeRange - method constructor -interface SecurityPolicyViolationEvent : Event - attribute @@toStringTag - getter blockedURI - getter columnNumber - getter disposition - getter documentURI - getter effectiveDirective - getter lineNumber - getter originalPolicy - getter referrer - getter sample - getter sourceFile - getter statusCode - getter violatedDirective - method constructor -interface Selection - attribute @@toStringTag - getter anchorNode - getter anchorOffset - getter baseNode - getter baseOffset - getter extentNode - getter extentOffset - getter focusNode - getter focusOffset - getter isCollapsed - getter rangeCount - getter type - method addRange - method collapse - method collapseToEnd - method collapseToStart - method constructor - method containsNode - method deleteFromDocument - method empty - method extend - method getRangeAt - method modify - method removeAllRanges - method removeRange - method selectAllChildren - method setBaseAndExtent - method setPosition - method toString -interface Sensor : EventTarget - attribute @@toStringTag - getter activated - getter hasReading - getter onactivate - getter onerror - getter onreading - getter timestamp - method constructor - method start - method stop - setter onactivate - setter onerror - setter onreading -interface SensorErrorEvent : Event - attribute @@toStringTag - getter error - method constructor -interface Serial : EventTarget - attribute @@toStringTag - getter onconnect - getter ondisconnect - method constructor - method getPorts - method requestPort - setter onconnect - setter ondisconnect -interface SerialPort - attribute @@toStringTag - getter readable - getter writable - method close - method constructor - method getSignals - method open - method setSignals -interface ServiceWorker : EventTarget - attribute @@toStringTag - getter onerror - getter onstatechange - getter scriptURL - getter state - method constructor - method postMessage - setter onerror - setter onstatechange -interface ServiceWorkerContainer : EventTarget - attribute @@toStringTag - getter controller - getter oncontrollerchange - getter onmessage - getter onmessageerror - getter ready - method constructor - method getRegistration - method getRegistrations - method register - method startMessages - setter oncontrollerchange - setter onmessage - setter onmessageerror -interface ServiceWorkerRegistration : EventTarget - attribute @@toStringTag - getter active - getter backgroundFetch - getter cookies - getter index - getter installing - getter navigationPreload - getter onupdatefound - getter paymentManager - getter periodicSync - getter pushManager - getter scope - getter sync - getter updateViaCache - getter waiting - method constructor - method getNotifications - method showNotification - method unregister - method update - setter onupdatefound -interface ShadowRoot : DocumentFragment - attribute @@toStringTag - getter activeElement - getter adoptedStyleSheets - getter delegatesFocus - getter fullscreenElement - getter host - getter innerHTML - getter mode - getter pictureInPictureElement - getter pointerLockElement - getter styleSheets - method constructor - method elementFromPoint - method elementsFromPoint - method getSelection - setter adoptedStyleSheets - setter fullscreenElement - setter innerHTML -interface SharedWorker : EventTarget - attribute @@toStringTag - getter onerror - getter port - method constructor - setter onerror -interface SourceBuffer : EventTarget - attribute @@toStringTag - getter appendWindowEnd - getter appendWindowStart - getter audioTracks - getter buffered - getter mode - getter onabort - getter onerror - getter onupdate - getter onupdateend - getter onupdatestart - getter timestampOffset - getter trackDefaults - getter updating - getter videoTracks - method abort - method appendBuffer - method changeType - method constructor - method remove - setter appendWindowEnd - setter appendWindowStart - setter mode - setter onabort - setter onerror - setter onupdate - setter onupdateend - setter onupdatestart - setter timestampOffset - setter trackDefaults -interface SourceBufferList : EventTarget - attribute @@toStringTag - getter length - getter onaddsourcebuffer - getter onremovesourcebuffer - method @@iterator - method constructor - setter onaddsourcebuffer - setter onremovesourcebuffer -interface SpeechSynthesisErrorEvent : SpeechSynthesisEvent - attribute @@toStringTag - getter error - method constructor -interface SpeechSynthesisEvent : Event - attribute @@toStringTag - getter charIndex - getter charLength - getter elapsedTime - getter name - getter utterance - method constructor -interface SpeechSynthesisUtterance : EventTarget - attribute @@toStringTag - getter lang - getter onboundary - getter onend - getter onerror - getter onmark - getter onpause - getter onresume - getter onstart - getter pitch - getter rate - getter text - getter voice - getter volume - method constructor - setter lang - setter onboundary - setter onend - setter onerror - setter onmark - setter onpause - setter onresume - setter onstart - setter pitch - setter rate - setter text - setter voice - setter volume -interface StaticRange - attribute @@toStringTag - getter collapsed - getter endContainer - getter endOffset - getter startContainer - getter startOffset - method constructor -interface StereoPannerNode : AudioNode - attribute @@toStringTag - getter pan - method constructor -interface Storage - attribute @@toStringTag - getter length - method clear - method constructor - method getItem - method key - method removeItem - method setItem -interface StorageEvent : Event - attribute @@toStringTag - getter key - getter newValue - getter oldValue - getter storageArea - getter url - method constructor - method initStorageEvent -interface StorageManager - attribute @@toStringTag - method constructor - method estimate - method persist - method persisted -interface StylePropertyMap : StylePropertyMapReadOnly - attribute @@toStringTag - method append - method clear - method constructor - method delete - method set -interface StylePropertyMapReadOnly - attribute @@toStringTag - getter size - method @@iterator - method constructor - method entries - method forEach - method get - method getAll - method has - method keys - method values -interface StyleSheet - attribute @@toStringTag - getter disabled - getter href - getter media - getter ownerNode - getter parentStyleSheet - getter title - getter type - method constructor - setter disabled - setter media -interface StyleSheetList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item -interface SubtleCrypto - attribute @@toStringTag - method constructor - method decrypt - method deriveBits - method deriveKey - method digest - method encrypt - method exportKey - method generateKey - method importKey - method sign - method unwrapKey - method verify - method wrapKey -interface SyncManager - attribute @@toStringTag - method constructor - method getTags - method register -interface TaskAttributionTiming : PerformanceEntry - attribute @@toStringTag - getter containerId - getter containerName - getter containerSrc - getter containerType - method constructor - method toJSON -interface TaskController : AbortController - attribute @@toStringTag - method constructor - method setPriority -interface TaskSignal : AbortSignal - attribute @@toStringTag - getter priority - method constructor -interface Text : CharacterData - attribute @@toStringTag - getter assignedSlot - getter wholeText - method constructor - method getDestinationInsertionPoints - method splitText -interface TextDecoder - attribute @@toStringTag - getter encoding - getter fatal - getter ignoreBOM - method constructor - method decode -interface TextDecoderStream - attribute @@toStringTag - getter encoding - getter fatal - getter ignoreBOM - getter readable - getter writable - method constructor -interface TextDetector - attribute @@toStringTag - method constructor - method detect -interface TextEncoder - attribute @@toStringTag - getter encoding - method constructor - method encode - method encodeInto -interface TextEncoderStream - attribute @@toStringTag - getter encoding - getter readable - getter writable - method constructor -interface TextEvent : UIEvent - attribute @@toStringTag - getter data - method constructor - method initTextEvent -interface TextFormatUpdateEvent : Event - attribute @@toStringTag - getter backgroundColor - getter formatRangeEnd - getter formatRangeStart - getter textDecorationColor - getter textUnderlineStyle - getter underlineColor - method constructor -interface TextMetrics - attribute @@toStringTag - getter actualBoundingBoxAscent - getter actualBoundingBoxDescent - getter actualBoundingBoxLeft - getter actualBoundingBoxRight - getter advances - getter emHeightAscent - getter emHeightDescent - getter fontBoundingBoxAscent - getter fontBoundingBoxDescent - getter width - method constructor - method getBaselines -interface TextTrack : EventTarget - attribute @@toStringTag - getter activeCues - getter cues - getter id - getter kind - getter label - getter language - getter mode - getter oncuechange - method addCue - method constructor - method removeCue - setter mode - setter oncuechange -interface TextTrackCue : EventTarget - attribute @@toStringTag - getter endTime - getter id - getter onenter - getter onexit - getter pauseOnExit - getter startTime - getter track - method constructor - setter endTime - setter id - setter onenter - setter onexit - setter pauseOnExit - setter startTime -interface TextTrackCueList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method getCueById -interface TextTrackList : EventTarget - attribute @@toStringTag - getter length - getter onaddtrack - getter onchange - getter onremovetrack - method @@iterator - method constructor - method getTrackById - setter onaddtrack - setter onchange - setter onremovetrack -interface TextUpdateEvent : Event - attribute @@toStringTag - getter newSelectionEnd - getter newSelectionStart - getter updateRangeEnd - getter updateRangeStart - getter updateText - method constructor -interface TimeRanges - attribute @@toStringTag - getter length - method constructor - method end - method start -interface TimestampTrigger - attribute @@toStringTag - getter timestamp - method constructor -interface Touch - attribute @@toStringTag - getter clientX - getter clientY - getter force - getter identifier - getter pageX - getter pageY - getter radiusX - getter radiusY - getter region - getter rotationAngle - getter screenX - getter screenY - getter target - method constructor -interface TouchEvent : UIEvent - attribute @@toStringTag - getter altKey - getter changedTouches - getter ctrlKey - getter metaKey - getter shiftKey - getter targetTouches - getter touches - method constructor -interface TouchList - attribute @@toStringTag - getter length - method @@iterator - method constructor - method item -interface TrackDefault - attribute @@toStringTag - getter byteStreamTrackID - getter kinds - getter label - getter language - getter type - method constructor -interface TrackDefaultList - attribute @@toStringTag - getter length - method @@iterator - method constructor -interface TrackEvent : Event - attribute @@toStringTag - getter track - method constructor -interface TransformStream - attribute @@toStringTag - getter readable - getter writable - method constructor -interface TransitionEvent : Event - attribute @@toStringTag - getter elapsedTime - getter propertyName - getter pseudoElement - method constructor -interface TreeWalker - attribute @@toStringTag - getter currentNode - getter filter - getter root - getter whatToShow - method constructor - method firstChild - method lastChild - method nextNode - method nextSibling - method parentNode - method previousNode - method previousSibling - setter currentNode -interface TrustedHTML - attribute @@toStringTag - method constructor - method toString -interface TrustedScript - attribute @@toStringTag - method constructor - method toString -interface TrustedScriptURL - attribute @@toStringTag - method constructor - method toString -interface TrustedTypePolicy - attribute @@toStringTag - method constructor -interface TrustedTypePolicyFactory - attribute @@toStringTag - method constructor - method getAttributeType - method getPropertyType - method getTypeMapping -interface UIEvent : Event - attribute @@toStringTag - getter detail - getter sourceCapabilities - getter view - getter which - method constructor - method initUIEvent -interface URL - static method createObjectURL - static method revokeObjectURL - attribute @@toStringTag - getter hash - getter host - getter hostname - getter href - getter origin - getter password - getter pathname - getter port - getter protocol - getter search - getter searchParams - getter username - method constructor - method toJSON - method toString - setter hash - setter host - setter hostname - setter href - setter password - setter pathname - setter port - setter protocol - setter search - setter username -interface URLSearchParams - attribute @@toStringTag - method @@iterator - method append - method constructor - method delete - method entries - method forEach - method get - method getAll - method has - method keys - method set - method sort - method toString - method values -interface USB : EventTarget - attribute @@toStringTag - getter onconnect - getter ondisconnect - method constructor - method getDevices - method requestDevice - setter onconnect - setter ondisconnect -interface USBAlternateInterface - attribute @@toStringTag - getter alternateSetting - getter endpoints - getter interfaceClass - getter interfaceName - getter interfaceProtocol - getter interfaceSubclass - method constructor -interface USBConfiguration - attribute @@toStringTag - getter configurationName - getter configurationValue - getter interfaces - method constructor -interface USBConnectionEvent : Event - attribute @@toStringTag - getter device - method constructor -interface USBDevice - attribute @@toStringTag - getter configuration - getter configurations - getter deviceClass - getter deviceProtocol - getter deviceSubclass - getter deviceVersionMajor - getter deviceVersionMinor - getter deviceVersionSubminor - getter manufacturerName - getter opened - getter productId - getter productName - getter serialNumber - getter usbVersionMajor - getter usbVersionMinor - getter usbVersionSubminor - getter vendorId - method claimInterface - method clearHalt - method close - method constructor - method controlTransferIn - method controlTransferOut - method isochronousTransferIn - method isochronousTransferOut - method open - method releaseInterface - method reset - method selectAlternateInterface - method selectConfiguration - method transferIn - method transferOut -interface USBEndpoint - attribute @@toStringTag - getter direction - getter endpointNumber - getter packetSize - getter type - method constructor -interface USBInTransferResult - attribute @@toStringTag - getter data - getter status - method constructor -interface USBInterface - attribute @@toStringTag - getter alternate - getter alternates - getter claimed - getter interfaceNumber - method constructor -interface USBIsochronousInTransferPacket - attribute @@toStringTag - getter data - getter status - method constructor -interface USBIsochronousInTransferResult - attribute @@toStringTag - getter data - getter packets - method constructor -interface USBIsochronousOutTransferPacket - attribute @@toStringTag - getter bytesWritten - getter status - method constructor -interface USBIsochronousOutTransferResult - attribute @@toStringTag - getter packets - method constructor -interface USBOutTransferResult - attribute @@toStringTag - getter bytesWritten - getter status - method constructor -interface UserActivation - attribute @@toStringTag - getter hasBeenActive - getter isActive - method constructor -interface VTTCue : TextTrackCue - attribute @@toStringTag - getter align - getter line - getter position - getter region - getter size - getter snapToLines - getter text - getter vertical - method constructor - method getCueAsHTML - setter align - setter line - setter position - setter region - setter size - setter snapToLines - setter text - setter vertical -interface VTTRegion - attribute @@toStringTag - getter id - getter lines - getter regionAnchorX - getter regionAnchorY - getter scroll - getter viewportAnchorX - getter viewportAnchorY - getter width - method constructor - setter id - setter lines - setter regionAnchorX - setter regionAnchorY - setter scroll - setter viewportAnchorX - setter viewportAnchorY - setter width -interface ValidityState - attribute @@toStringTag - getter badInput - getter customError - getter patternMismatch - getter rangeOverflow - getter rangeUnderflow - getter stepMismatch - getter tooLong - getter tooShort - getter typeMismatch - getter valid - getter valueMissing - method constructor -interface VideoPlaybackQuality - attribute @@toStringTag - getter corruptedVideoFrames - getter creationTime - getter droppedVideoFrames - getter totalVideoFrames - method constructor -interface VideoTrack - attribute @@toStringTag - getter id - getter kind - getter label - getter language - getter selected - getter sourceBuffer - method constructor - setter selected -interface VideoTrackList : EventTarget - attribute @@toStringTag - getter length - getter onaddtrack - getter onchange - getter onremovetrack - getter selectedIndex - method @@iterator - method constructor - method getTrackById - setter onaddtrack - setter onchange - setter onremovetrack -interface VisualViewport : EventTarget - attribute @@toStringTag - getter height - getter offsetLeft - getter offsetTop - getter onresize - getter onscroll - getter pageLeft - getter pageTop - getter scale - getter width - method constructor - setter onresize - setter onscroll -interface WakeLock - attribute @@toStringTag - method constructor - method request -interface WakeLockSentinel : EventTarget - attribute @@toStringTag - getter onrelease - getter type - method constructor - method release - setter onrelease -interface WaveShaperNode : AudioNode - attribute @@toStringTag - getter curve - getter oversample - method constructor - setter curve - setter oversample -interface WebGL2ComputeRenderingContext - attribute @@toStringTag - attribute ACTIVE_ATOMIC_COUNTER_BUFFERS - attribute ACTIVE_ATTRIBUTES - attribute ACTIVE_RESOURCES - attribute ACTIVE_TEXTURE - attribute ACTIVE_UNIFORMS - attribute ACTIVE_UNIFORM_BLOCKS - attribute ACTIVE_VARIABLES - attribute ALIASED_LINE_WIDTH_RANGE - attribute ALIASED_POINT_SIZE_RANGE - attribute ALL_BARRIER_BITS - attribute ALPHA - attribute ALPHA_BITS - attribute ALREADY_SIGNALED - attribute ALWAYS - attribute ANY_SAMPLES_PASSED - attribute ANY_SAMPLES_PASSED_CONSERVATIVE - attribute ARRAY_BUFFER - attribute ARRAY_BUFFER_BINDING - attribute ARRAY_SIZE - attribute ARRAY_STRIDE - attribute ATOMIC_COUNTER_BARRIER_BIT - attribute ATOMIC_COUNTER_BUFFER - attribute ATOMIC_COUNTER_BUFFER_BINDING - attribute ATOMIC_COUNTER_BUFFER_INDEX - attribute ATOMIC_COUNTER_BUFFER_SIZE - attribute ATOMIC_COUNTER_BUFFER_START - attribute ATTACHED_SHADERS - attribute BACK - attribute BLEND - attribute BLEND_COLOR - attribute BLEND_DST_ALPHA - attribute BLEND_DST_RGB - attribute BLEND_EQUATION - attribute BLEND_EQUATION_ALPHA - attribute BLEND_EQUATION_RGB - attribute BLEND_SRC_ALPHA - attribute BLEND_SRC_RGB - attribute BLOCK_INDEX - attribute BLUE_BITS - attribute BOOL - attribute BOOL_VEC2 - attribute BOOL_VEC3 - attribute BOOL_VEC4 - attribute BROWSER_DEFAULT_WEBGL - attribute BUFFER_BINDING - attribute BUFFER_DATA_SIZE - attribute BUFFER_SIZE - attribute BUFFER_UPDATE_BARRIER_BIT - attribute BUFFER_USAGE - attribute BUFFER_VARIABLE - attribute BYTE - attribute CCW - attribute CLAMP_TO_EDGE - attribute COLOR - attribute COLOR_ATTACHMENT0 - attribute COLOR_ATTACHMENT1 - attribute COLOR_ATTACHMENT10 - attribute COLOR_ATTACHMENT11 - attribute COLOR_ATTACHMENT12 - attribute COLOR_ATTACHMENT13 - attribute COLOR_ATTACHMENT14 - attribute COLOR_ATTACHMENT15 - attribute COLOR_ATTACHMENT2 - attribute COLOR_ATTACHMENT3 - attribute COLOR_ATTACHMENT4 - attribute COLOR_ATTACHMENT5 - attribute COLOR_ATTACHMENT6 - attribute COLOR_ATTACHMENT7 - attribute COLOR_ATTACHMENT8 - attribute COLOR_ATTACHMENT9 - attribute COLOR_BUFFER_BIT - attribute COLOR_CLEAR_VALUE - attribute COLOR_WRITEMASK - attribute COMMAND_BARRIER_BIT - attribute COMPARE_REF_TO_TEXTURE - attribute COMPILE_STATUS - attribute COMPRESSED_TEXTURE_FORMATS - attribute COMPUTE_SHADER - attribute CONDITION_SATISFIED - attribute CONSTANT_ALPHA - attribute CONSTANT_COLOR - attribute CONTEXT_LOST_WEBGL - attribute COPY_READ_BUFFER - attribute COPY_READ_BUFFER_BINDING - attribute COPY_WRITE_BUFFER - attribute COPY_WRITE_BUFFER_BINDING - attribute CULL_FACE - attribute CULL_FACE_MODE - attribute CURRENT_PROGRAM - attribute CURRENT_QUERY - attribute CURRENT_VERTEX_ATTRIB - attribute CW - attribute DECR - attribute DECR_WRAP - attribute DELETE_STATUS - attribute DEPTH - attribute DEPTH24_STENCIL8 - attribute DEPTH32F_STENCIL8 - attribute DEPTH_ATTACHMENT - attribute DEPTH_BITS - attribute DEPTH_BUFFER_BIT - attribute DEPTH_CLEAR_VALUE - attribute DEPTH_COMPONENT - attribute DEPTH_COMPONENT16 - attribute DEPTH_COMPONENT24 - attribute DEPTH_COMPONENT32F - attribute DEPTH_FUNC - attribute DEPTH_RANGE - attribute DEPTH_STENCIL - attribute DEPTH_STENCIL_ATTACHMENT - attribute DEPTH_TEST - attribute DEPTH_WRITEMASK - attribute DISPATCH_INDIRECT_BUFFER - attribute DISPATCH_INDIRECT_BUFFER_BINDING - attribute DITHER - attribute DONT_CARE - attribute DRAW_BUFFER0 - attribute DRAW_BUFFER1 - attribute DRAW_BUFFER10 - attribute DRAW_BUFFER11 - attribute DRAW_BUFFER12 - attribute DRAW_BUFFER13 - attribute DRAW_BUFFER14 - attribute DRAW_BUFFER15 - attribute DRAW_BUFFER2 - attribute DRAW_BUFFER3 - attribute DRAW_BUFFER4 - attribute DRAW_BUFFER5 - attribute DRAW_BUFFER6 - attribute DRAW_BUFFER7 - attribute DRAW_BUFFER8 - attribute DRAW_BUFFER9 - attribute DRAW_FRAMEBUFFER - attribute DRAW_FRAMEBUFFER_BINDING - attribute DRAW_INDIRECT_BUFFER - attribute DRAW_INDIRECT_BUFFER_BINDING - attribute DST_ALPHA - attribute DST_COLOR - attribute DYNAMIC_COPY - attribute DYNAMIC_DRAW - attribute DYNAMIC_READ - attribute ELEMENT_ARRAY_BARRIER_BIT - attribute ELEMENT_ARRAY_BUFFER - attribute ELEMENT_ARRAY_BUFFER_BINDING - attribute EQUAL - attribute FASTEST - attribute FLOAT - attribute FLOAT_32_UNSIGNED_INT_24_8_REV - attribute FLOAT_MAT2 - attribute FLOAT_MAT2x3 - attribute FLOAT_MAT2x4 - attribute FLOAT_MAT3 - attribute FLOAT_MAT3x2 - attribute FLOAT_MAT3x4 - attribute FLOAT_MAT4 - attribute FLOAT_MAT4x2 - attribute FLOAT_MAT4x3 - attribute FLOAT_VEC2 - attribute FLOAT_VEC3 - attribute FLOAT_VEC4 - attribute FRAGMENT_SHADER - attribute FRAGMENT_SHADER_DERIVATIVE_HINT - attribute FRAMEBUFFER - attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE - attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE - attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING - attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE - attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE - attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE - attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE - attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL - attribute FRAMEBUFFER_BARRIER_BIT - attribute FRAMEBUFFER_BINDING - attribute FRAMEBUFFER_COMPLETE - attribute FRAMEBUFFER_DEFAULT - attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT - attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS - attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT - attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE - attribute FRAMEBUFFER_UNSUPPORTED - attribute FRONT - attribute FRONT_AND_BACK - attribute FRONT_FACE - attribute FUNC_ADD - attribute FUNC_REVERSE_SUBTRACT - attribute FUNC_SUBTRACT - attribute GENERATE_MIPMAP_HINT - attribute GEQUAL - attribute GREATER - attribute GREEN_BITS - attribute HALF_FLOAT - attribute HIGH_FLOAT - attribute HIGH_INT - attribute IMPLEMENTATION_COLOR_READ_FORMAT - attribute IMPLEMENTATION_COLOR_READ_TYPE - attribute INCR - attribute INCR_WRAP - attribute INT - attribute INTERLEAVED_ATTRIBS - attribute INT_2_10_10_10_REV - attribute INT_SAMPLER_2D - attribute INT_SAMPLER_2D_ARRAY - attribute INT_SAMPLER_3D - attribute INT_SAMPLER_CUBE - attribute INT_VEC2 - attribute INT_VEC3 - attribute INT_VEC4 - attribute INVALID_ENUM - attribute INVALID_FRAMEBUFFER_OPERATION - attribute INVALID_INDEX - attribute INVALID_OPERATION - attribute INVALID_VALUE - attribute INVERT - attribute IS_ROW_MAJOR - attribute KEEP - attribute LEQUAL - attribute LESS - attribute LINEAR - attribute LINEAR_MIPMAP_LINEAR - attribute LINEAR_MIPMAP_NEAREST - attribute LINES - attribute LINE_LOOP - attribute LINE_STRIP - attribute LINE_WIDTH - attribute LINK_STATUS - attribute LOCATION - attribute LOW_FLOAT - attribute LOW_INT - attribute LUMINANCE - attribute LUMINANCE_ALPHA - attribute MATRIX_STRIDE - attribute MAX - attribute MAX_3D_TEXTURE_SIZE - attribute MAX_ARRAY_TEXTURE_LAYERS - attribute MAX_ATOMIC_COUNTER_BUFFER_BINDINGS - attribute MAX_ATOMIC_COUNTER_BUFFER_SIZE - attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL - attribute MAX_COLOR_ATTACHMENTS - attribute MAX_COMBINED_ATOMIC_COUNTERS - attribute MAX_COMBINED_ATOMIC_COUNTER_BUFFERS - attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS - attribute MAX_COMBINED_SHADER_STORAGE_BLOCKS - attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS - attribute MAX_COMBINED_UNIFORM_BLOCKS - attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS - attribute MAX_COMPUTE_ATOMIC_COUNTERS - attribute MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS - attribute MAX_COMPUTE_IMAGE_UNIFORMS - attribute MAX_COMPUTE_SHADER_STORAGE_BLOCKS - attribute MAX_COMPUTE_SHARED_MEMORY_SIZE - attribute MAX_COMPUTE_TEXTURE_IMAGE_UNITS - attribute MAX_COMPUTE_UNIFORM_BLOCKS - attribute MAX_COMPUTE_UNIFORM_COMPONENTS - attribute MAX_COMPUTE_WORK_GROUP_COUNT - attribute MAX_COMPUTE_WORK_GROUP_INVOCATIONS - attribute MAX_COMPUTE_WORK_GROUP_SIZE - attribute MAX_CUBE_MAP_TEXTURE_SIZE - attribute MAX_DRAW_BUFFERS - attribute MAX_ELEMENTS_INDICES - attribute MAX_ELEMENTS_VERTICES - attribute MAX_ELEMENT_INDEX - attribute MAX_FRAGMENT_ATOMIC_COUNTERS - attribute MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS - attribute MAX_FRAGMENT_INPUT_COMPONENTS - attribute MAX_FRAGMENT_SHADER_STORAGE_BLOCKS - attribute MAX_FRAGMENT_UNIFORM_BLOCKS - attribute MAX_FRAGMENT_UNIFORM_COMPONENTS - attribute MAX_FRAGMENT_UNIFORM_VECTORS - attribute MAX_NAME_LENGTH - attribute MAX_NUM_ACTIVE_VARIABLES - attribute MAX_PROGRAM_TEXEL_OFFSET - attribute MAX_RENDERBUFFER_SIZE - attribute MAX_SAMPLES - attribute MAX_SERVER_WAIT_TIMEOUT - attribute MAX_SHADER_STORAGE_BLOCK_SIZE - attribute MAX_SHADER_STORAGE_BUFFER_BINDINGS - attribute MAX_TEXTURE_IMAGE_UNITS - attribute MAX_TEXTURE_LOD_BIAS - attribute MAX_TEXTURE_SIZE - attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS - attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS - attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS - attribute MAX_UNIFORM_BLOCK_SIZE - attribute MAX_UNIFORM_BUFFER_BINDINGS - attribute MAX_VARYING_COMPONENTS - attribute MAX_VARYING_VECTORS - attribute MAX_VERTEX_ATOMIC_COUNTERS - attribute MAX_VERTEX_ATOMIC_COUNTER_BUFFERS - attribute MAX_VERTEX_ATTRIBS - attribute MAX_VERTEX_OUTPUT_COMPONENTS - attribute MAX_VERTEX_SHADER_STORAGE_BLOCKS - attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS - attribute MAX_VERTEX_UNIFORM_BLOCKS - attribute MAX_VERTEX_UNIFORM_COMPONENTS - attribute MAX_VERTEX_UNIFORM_VECTORS - attribute MAX_VIEWPORT_DIMS - attribute MEDIUM_FLOAT - attribute MEDIUM_INT - attribute MIN - attribute MIN_PROGRAM_TEXEL_OFFSET - attribute MIRRORED_REPEAT - attribute NAME_LENGTH - attribute NEAREST - attribute NEAREST_MIPMAP_LINEAR - attribute NEAREST_MIPMAP_NEAREST - attribute NEVER - attribute NICEST - attribute NONE - attribute NOTEQUAL - attribute NO_ERROR - attribute NUM_ACTIVE_VARIABLES - attribute OBJECT_TYPE - attribute OFFSET - attribute ONE - attribute ONE_MINUS_CONSTANT_ALPHA - attribute ONE_MINUS_CONSTANT_COLOR - attribute ONE_MINUS_DST_ALPHA - attribute ONE_MINUS_DST_COLOR - attribute ONE_MINUS_SRC_ALPHA - attribute ONE_MINUS_SRC_COLOR - attribute OUT_OF_MEMORY - attribute PACK_ALIGNMENT - attribute PACK_ROW_LENGTH - attribute PACK_SKIP_PIXELS - attribute PACK_SKIP_ROWS - attribute PIXEL_BUFFER_BARRIER_BIT - attribute PIXEL_PACK_BUFFER - attribute PIXEL_PACK_BUFFER_BINDING - attribute PIXEL_UNPACK_BUFFER - attribute PIXEL_UNPACK_BUFFER_BINDING - attribute POINTS - attribute POLYGON_OFFSET_FACTOR - attribute POLYGON_OFFSET_FILL - attribute POLYGON_OFFSET_UNITS - attribute PROGRAM_INPUT - attribute PROGRAM_OUTPUT - attribute QUERY_RESULT - attribute QUERY_RESULT_AVAILABLE - attribute R11F_G11F_B10F - attribute R16F - attribute R16I - attribute R16UI - attribute R32F - attribute R32I - attribute R32UI - attribute R8 - attribute R8I - attribute R8UI - attribute R8_SNORM - attribute RASTERIZER_DISCARD - attribute READ_BUFFER - attribute READ_FRAMEBUFFER - attribute READ_FRAMEBUFFER_BINDING - attribute READ_ONLY - attribute READ_WRITE - attribute RED - attribute RED_BITS - attribute RED_INTEGER - attribute REFERENCED_BY_COMPUTE_SHADER - attribute REFERENCED_BY_FRAGMENT_SHADER - attribute REFERENCED_BY_VERTEX_SHADER - attribute RENDERBUFFER - attribute RENDERBUFFER_ALPHA_SIZE - attribute RENDERBUFFER_BINDING - attribute RENDERBUFFER_BLUE_SIZE - attribute RENDERBUFFER_DEPTH_SIZE - attribute RENDERBUFFER_GREEN_SIZE - attribute RENDERBUFFER_HEIGHT - attribute RENDERBUFFER_INTERNAL_FORMAT - attribute RENDERBUFFER_RED_SIZE - attribute RENDERBUFFER_SAMPLES - attribute RENDERBUFFER_STENCIL_SIZE - attribute RENDERBUFFER_WIDTH - attribute RENDERER - attribute REPEAT - attribute REPLACE - attribute RG - attribute RG16F - attribute RG16I - attribute RG16UI - attribute RG32F - attribute RG32I - attribute RG32UI - attribute RG8 - attribute RG8I - attribute RG8UI - attribute RG8_SNORM - attribute RGB - attribute RGB10_A2 - attribute RGB10_A2UI - attribute RGB16F - attribute RGB16I - attribute RGB16UI - attribute RGB32F - attribute RGB32I - attribute RGB32UI - attribute RGB565 - attribute RGB5_A1 - attribute RGB8 - attribute RGB8I - attribute RGB8UI - attribute RGB8_SNORM - attribute RGB9_E5 - attribute RGBA - attribute RGBA16F - attribute RGBA16I - attribute RGBA16UI - attribute RGBA32F - attribute RGBA32I - attribute RGBA32UI - attribute RGBA4 - attribute RGBA8 - attribute RGBA8I - attribute RGBA8UI - attribute RGBA8_SNORM - attribute RGBA_INTEGER - attribute RGB_INTEGER - attribute RG_INTEGER - attribute SAMPLER_2D - attribute SAMPLER_2D_ARRAY - attribute SAMPLER_2D_ARRAY_SHADOW - attribute SAMPLER_2D_SHADOW - attribute SAMPLER_3D - attribute SAMPLER_BINDING - attribute SAMPLER_CUBE - attribute SAMPLER_CUBE_SHADOW - attribute SAMPLES - attribute SAMPLE_ALPHA_TO_COVERAGE - attribute SAMPLE_BUFFERS - attribute SAMPLE_COVERAGE - attribute SAMPLE_COVERAGE_INVERT - attribute SAMPLE_COVERAGE_VALUE - attribute SCISSOR_BOX - attribute SCISSOR_TEST - attribute SEPARATE_ATTRIBS - attribute SHADER_IMAGE_ACCESS_BARRIER_BIT - attribute SHADER_STORAGE_BARRIER_BIT - attribute SHADER_STORAGE_BLOCK - attribute SHADER_STORAGE_BUFFER - attribute SHADER_STORAGE_BUFFER_BINDING - attribute SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT - attribute SHADER_STORAGE_BUFFER_SIZE - attribute SHADER_STORAGE_BUFFER_START - attribute SHADER_TYPE - attribute SHADING_LANGUAGE_VERSION - attribute SHORT - attribute SIGNALED - attribute SIGNED_NORMALIZED - attribute SRC_ALPHA - attribute SRC_ALPHA_SATURATE - attribute SRC_COLOR - attribute SRGB - attribute SRGB8 - attribute SRGB8_ALPHA8 - attribute STATIC_COPY - attribute STATIC_DRAW - attribute STATIC_READ - attribute STENCIL - attribute STENCIL_ATTACHMENT - attribute STENCIL_BACK_FAIL - attribute STENCIL_BACK_FUNC - attribute STENCIL_BACK_PASS_DEPTH_FAIL - attribute STENCIL_BACK_PASS_DEPTH_PASS - attribute STENCIL_BACK_REF - attribute STENCIL_BACK_VALUE_MASK - attribute STENCIL_BACK_WRITEMASK - attribute STENCIL_BITS - attribute STENCIL_BUFFER_BIT - attribute STENCIL_CLEAR_VALUE - attribute STENCIL_FAIL - attribute STENCIL_FUNC - attribute STENCIL_INDEX8 - attribute STENCIL_PASS_DEPTH_FAIL - attribute STENCIL_PASS_DEPTH_PASS - attribute STENCIL_REF - attribute STENCIL_TEST - attribute STENCIL_VALUE_MASK - attribute STENCIL_WRITEMASK - attribute STREAM_COPY - attribute STREAM_DRAW - attribute STREAM_READ - attribute SUBPIXEL_BITS - attribute SYNC_CONDITION - attribute SYNC_FENCE - attribute SYNC_FLAGS - attribute SYNC_FLUSH_COMMANDS_BIT - attribute SYNC_GPU_COMMANDS_COMPLETE - attribute SYNC_STATUS - attribute TEXTURE - attribute TEXTURE0 - attribute TEXTURE1 - attribute TEXTURE10 - attribute TEXTURE11 - attribute TEXTURE12 - attribute TEXTURE13 - attribute TEXTURE14 - attribute TEXTURE15 - attribute TEXTURE16 - attribute TEXTURE17 - attribute TEXTURE18 - attribute TEXTURE19 - attribute TEXTURE2 - attribute TEXTURE20 - attribute TEXTURE21 - attribute TEXTURE22 - attribute TEXTURE23 - attribute TEXTURE24 - attribute TEXTURE25 - attribute TEXTURE26 - attribute TEXTURE27 - attribute TEXTURE28 - attribute TEXTURE29 - attribute TEXTURE3 - attribute TEXTURE30 - attribute TEXTURE31 - attribute TEXTURE4 - attribute TEXTURE5 - attribute TEXTURE6 - attribute TEXTURE7 - attribute TEXTURE8 - attribute TEXTURE9 - attribute TEXTURE_2D - attribute TEXTURE_2D_ARRAY - attribute TEXTURE_3D - attribute TEXTURE_BASE_LEVEL - attribute TEXTURE_BINDING_2D - attribute TEXTURE_BINDING_2D_ARRAY - attribute TEXTURE_BINDING_3D - attribute TEXTURE_BINDING_CUBE_MAP - attribute TEXTURE_COMPARE_FUNC - attribute TEXTURE_COMPARE_MODE - attribute TEXTURE_CUBE_MAP - attribute TEXTURE_CUBE_MAP_NEGATIVE_X - attribute TEXTURE_CUBE_MAP_NEGATIVE_Y - attribute TEXTURE_CUBE_MAP_NEGATIVE_Z - attribute TEXTURE_CUBE_MAP_POSITIVE_X - attribute TEXTURE_CUBE_MAP_POSITIVE_Y - attribute TEXTURE_CUBE_MAP_POSITIVE_Z - attribute TEXTURE_FETCH_BARRIER_BIT - attribute TEXTURE_IMMUTABLE_FORMAT - attribute TEXTURE_IMMUTABLE_LEVELS - attribute TEXTURE_MAG_FILTER - attribute TEXTURE_MAX_LEVEL - attribute TEXTURE_MAX_LOD - attribute TEXTURE_MIN_FILTER - attribute TEXTURE_MIN_LOD - attribute TEXTURE_UPDATE_BARRIER_BIT - attribute TEXTURE_WRAP_R - attribute TEXTURE_WRAP_S - attribute TEXTURE_WRAP_T - attribute TIMEOUT_EXPIRED - attribute TIMEOUT_IGNORED - attribute TOP_LEVEL_ARRAY_SIZE - attribute TOP_LEVEL_ARRAY_STRIDE - attribute TRANSFORM_FEEDBACK - attribute TRANSFORM_FEEDBACK_ACTIVE - attribute TRANSFORM_FEEDBACK_BARRIER_BIT - attribute TRANSFORM_FEEDBACK_BINDING - attribute TRANSFORM_FEEDBACK_BUFFER - attribute TRANSFORM_FEEDBACK_BUFFER_BINDING - attribute TRANSFORM_FEEDBACK_BUFFER_MODE - attribute TRANSFORM_FEEDBACK_BUFFER_SIZE - attribute TRANSFORM_FEEDBACK_BUFFER_START - attribute TRANSFORM_FEEDBACK_PAUSED - attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN - attribute TRANSFORM_FEEDBACK_VARYING - attribute TRANSFORM_FEEDBACK_VARYINGS - attribute TRIANGLES - attribute TRIANGLE_FAN - attribute TRIANGLE_STRIP - attribute TYPE - attribute UNIFORM - attribute UNIFORM_ARRAY_STRIDE - attribute UNIFORM_BARRIER_BIT - attribute UNIFORM_BLOCK - attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS - attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES - attribute UNIFORM_BLOCK_BINDING - attribute UNIFORM_BLOCK_DATA_SIZE - attribute UNIFORM_BLOCK_INDEX - attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER - attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER - attribute UNIFORM_BUFFER - attribute UNIFORM_BUFFER_BINDING - attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT - attribute UNIFORM_BUFFER_SIZE - attribute UNIFORM_BUFFER_START - attribute UNIFORM_IS_ROW_MAJOR - attribute UNIFORM_MATRIX_STRIDE - attribute UNIFORM_OFFSET - attribute UNIFORM_SIZE - attribute UNIFORM_TYPE - attribute UNPACK_ALIGNMENT - attribute UNPACK_COLORSPACE_CONVERSION_WEBGL - attribute UNPACK_FLIP_Y_WEBGL - attribute UNPACK_IMAGE_HEIGHT - attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL - attribute UNPACK_ROW_LENGTH - attribute UNPACK_SKIP_IMAGES - attribute UNPACK_SKIP_PIXELS - attribute UNPACK_SKIP_ROWS - attribute UNSIGNALED - attribute UNSIGNED_BYTE - attribute UNSIGNED_INT - attribute UNSIGNED_INT_10F_11F_11F_REV - attribute UNSIGNED_INT_24_8 - attribute UNSIGNED_INT_2_10_10_10_REV - attribute UNSIGNED_INT_5_9_9_9_REV - attribute UNSIGNED_INT_ATOMIC_COUNTER - attribute UNSIGNED_INT_SAMPLER_2D - attribute UNSIGNED_INT_SAMPLER_2D_ARRAY - attribute UNSIGNED_INT_SAMPLER_3D - attribute UNSIGNED_INT_SAMPLER_CUBE - attribute UNSIGNED_INT_VEC2 - attribute UNSIGNED_INT_VEC3 - attribute UNSIGNED_INT_VEC4 - attribute UNSIGNED_NORMALIZED - attribute UNSIGNED_SHORT - attribute UNSIGNED_SHORT_4_4_4_4 - attribute UNSIGNED_SHORT_5_5_5_1 - attribute UNSIGNED_SHORT_5_6_5 - attribute VALIDATE_STATUS - attribute VENDOR - attribute VERSION - attribute VERTEX_ARRAY_BINDING - attribute VERTEX_ATTRIB_ARRAY_BARRIER_BIT - attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING - attribute VERTEX_ATTRIB_ARRAY_DIVISOR - attribute VERTEX_ATTRIB_ARRAY_ENABLED - attribute VERTEX_ATTRIB_ARRAY_INTEGER - attribute VERTEX_ATTRIB_ARRAY_NORMALIZED - attribute VERTEX_ATTRIB_ARRAY_POINTER - attribute VERTEX_ATTRIB_ARRAY_SIZE - attribute VERTEX_ATTRIB_ARRAY_STRIDE - attribute VERTEX_ATTRIB_ARRAY_TYPE - attribute VERTEX_SHADER - attribute VIEWPORT - attribute WAIT_FAILED - attribute WRITE_ONLY - attribute ZERO - getter canvas - getter drawingBufferHeight - getter drawingBufferWidth - method activeTexture - method attachShader - method beginQuery - method beginTransformFeedback - method bindAttribLocation - method bindBuffer - method bindBufferBase - method bindBufferRange - method bindFramebuffer - method bindImageTexture - method bindRenderbuffer - method bindSampler - method bindTexture - method bindTransformFeedback - method bindVertexArray - method blendColor - method blendEquation - method blendEquationSeparate - method blendFunc - method blendFuncSeparate - method blitFramebuffer - method bufferData - method bufferSubData - method checkFramebufferStatus - method clear - method clearBufferfi - method clearBufferfv - method clearBufferiv - method clearBufferuiv - method clearColor - method clearDepth - method clearStencil - method clientWaitSync - method colorMask - method commit - method compileShader - method compressedTexImage2D - method compressedTexImage3D - method compressedTexSubImage2D - method compressedTexSubImage3D - method constructor - method copyBufferSubData - method copyTexImage2D - method copyTexSubImage2D - method copyTexSubImage3D - method createBuffer - method createFramebuffer - method createProgram - method createQuery - method createRenderbuffer - method createSampler - method createShader - method createTexture - method createTransformFeedback - method createVertexArray - method cullFace - method deleteBuffer - method deleteFramebuffer - method deleteProgram - method deleteQuery - method deleteRenderbuffer - method deleteSampler - method deleteShader - method deleteSync - method deleteTexture - method deleteTransformFeedback - method deleteVertexArray - method depthFunc - method depthMask - method depthRange - method detachShader - method disable - method disableVertexAttribArray - method dispatchCompute - method dispatchComputeIndirect - method drawArrays - method drawArraysIndirect - method drawArraysInstanced - method drawBuffers - method drawElements - method drawElementsIndirect - method drawElementsInstanced - method drawRangeElements - method enable - method enableVertexAttribArray - method endQuery - method endTransformFeedback - method fenceSync - method finish - method flush - method framebufferRenderbuffer - method framebufferTexture2D - method framebufferTextureLayer - method frontFace - method generateMipmap - method getActiveAttrib - method getActiveUniform - method getActiveUniformBlockName - method getActiveUniformBlockParameter - method getActiveUniforms - method getAttachedShaders - method getAttribLocation - method getBufferParameter - method getBufferSubData - method getContextAttributes - method getError - method getExtension - method getFragDataLocation - method getFramebufferAttachmentParameter - method getIndexedParameter - method getInternalformatParameter - method getParameter - method getProgramInfoLog - method getProgramInterfaceParameter - method getProgramParameter - method getProgramResource - method getProgramResourceIndex - method getProgramResourceLocation - method getProgramResourceName - method getQuery - method getQueryParameter - method getRenderbufferParameter - method getSamplerParameter - method getShaderInfoLog - method getShaderParameter - method getShaderPrecisionFormat - method getShaderSource - method getSupportedExtensions - method getSyncParameter - method getTexParameter - method getTransformFeedbackVarying - method getUniform - method getUniformBlockIndex - method getUniformIndices - method getUniformLocation - method getVertexAttrib - method getVertexAttribOffset - method hint - method invalidateFramebuffer - method invalidateSubFramebuffer - method isBuffer - method isContextLost - method isEnabled - method isFramebuffer - method isProgram - method isQuery - method isRenderbuffer - method isSampler - method isShader - method isSync - method isTexture - method isTransformFeedback - method isVertexArray - method lineWidth - method linkProgram - method makeXRCompatible - method memoryBarrier - method memoryBarrierByRegion - method pauseTransformFeedback - method pixelStorei - method polygonOffset - method readBuffer - method readPixels - method renderbufferStorage - method renderbufferStorageMultisample - method resumeTransformFeedback - method sampleCoverage - method samplerParameterf - method samplerParameteri - method scissor - method shaderSource - method stencilFunc - method stencilFuncSeparate - method stencilMask - method stencilMaskSeparate - method stencilOp - method stencilOpSeparate - method texImage2D - method texImage3D - method texParameterf - method texParameteri - method texStorage2D - method texStorage3D - method texSubImage2D - method texSubImage3D - method transformFeedbackVaryings - method uniform1f - method uniform1fv - method uniform1i - method uniform1iv - method uniform1ui - method uniform1uiv - method uniform2f - method uniform2fv - method uniform2i - method uniform2iv - method uniform2ui - method uniform2uiv - method uniform3f - method uniform3fv - method uniform3i - method uniform3iv - method uniform3ui - method uniform3uiv - method uniform4f - method uniform4fv - method uniform4i - method uniform4iv - method uniform4ui - method uniform4uiv - method uniformBlockBinding - method uniformMatrix2fv - method uniformMatrix2x3fv - method uniformMatrix2x4fv - method uniformMatrix3fv - method uniformMatrix3x2fv - method uniformMatrix3x4fv - method uniformMatrix4fv - method uniformMatrix4x2fv - method uniformMatrix4x3fv - method useProgram - method validateProgram - method vertexAttrib1f - method vertexAttrib1fv - method vertexAttrib2f - method vertexAttrib2fv - method vertexAttrib3f - method vertexAttrib3fv - method vertexAttrib4f - method vertexAttrib4fv - method vertexAttribDivisor - method vertexAttribI4i - method vertexAttribI4iv - method vertexAttribI4ui - method vertexAttribI4uiv - method vertexAttribIPointer - method vertexAttribPointer - method viewport - method waitSync -interface WebGL2RenderingContext - attribute @@toStringTag - attribute ACTIVE_ATTRIBUTES - attribute ACTIVE_TEXTURE - attribute ACTIVE_UNIFORMS - attribute ACTIVE_UNIFORM_BLOCKS - attribute ALIASED_LINE_WIDTH_RANGE - attribute ALIASED_POINT_SIZE_RANGE - attribute ALPHA - attribute ALPHA_BITS - attribute ALREADY_SIGNALED - attribute ALWAYS - attribute ANY_SAMPLES_PASSED - attribute ANY_SAMPLES_PASSED_CONSERVATIVE - attribute ARRAY_BUFFER - attribute ARRAY_BUFFER_BINDING - attribute ATTACHED_SHADERS - attribute BACK - attribute BLEND - attribute BLEND_COLOR - attribute BLEND_DST_ALPHA - attribute BLEND_DST_RGB - attribute BLEND_EQUATION - attribute BLEND_EQUATION_ALPHA - attribute BLEND_EQUATION_RGB - attribute BLEND_SRC_ALPHA - attribute BLEND_SRC_RGB - attribute BLUE_BITS - attribute BOOL - attribute BOOL_VEC2 - attribute BOOL_VEC3 - attribute BOOL_VEC4 - attribute BROWSER_DEFAULT_WEBGL - attribute BUFFER_SIZE - attribute BUFFER_USAGE - attribute BYTE - attribute CCW - attribute CLAMP_TO_EDGE - attribute COLOR - attribute COLOR_ATTACHMENT0 - attribute COLOR_ATTACHMENT1 - attribute COLOR_ATTACHMENT10 - attribute COLOR_ATTACHMENT11 - attribute COLOR_ATTACHMENT12 - attribute COLOR_ATTACHMENT13 - attribute COLOR_ATTACHMENT14 - attribute COLOR_ATTACHMENT15 - attribute COLOR_ATTACHMENT2 - attribute COLOR_ATTACHMENT3 - attribute COLOR_ATTACHMENT4 - attribute COLOR_ATTACHMENT5 - attribute COLOR_ATTACHMENT6 - attribute COLOR_ATTACHMENT7 - attribute COLOR_ATTACHMENT8 - attribute COLOR_ATTACHMENT9 - attribute COLOR_BUFFER_BIT - attribute COLOR_CLEAR_VALUE - attribute COLOR_WRITEMASK - attribute COMPARE_REF_TO_TEXTURE - attribute COMPILE_STATUS - attribute COMPRESSED_TEXTURE_FORMATS - attribute CONDITION_SATISFIED - attribute CONSTANT_ALPHA - attribute CONSTANT_COLOR - attribute CONTEXT_LOST_WEBGL - attribute COPY_READ_BUFFER - attribute COPY_READ_BUFFER_BINDING - attribute COPY_WRITE_BUFFER - attribute COPY_WRITE_BUFFER_BINDING - attribute CULL_FACE - attribute CULL_FACE_MODE - attribute CURRENT_PROGRAM - attribute CURRENT_QUERY - attribute CURRENT_VERTEX_ATTRIB - attribute CW - attribute DECR - attribute DECR_WRAP - attribute DELETE_STATUS - attribute DEPTH - attribute DEPTH24_STENCIL8 - attribute DEPTH32F_STENCIL8 - attribute DEPTH_ATTACHMENT - attribute DEPTH_BITS - attribute DEPTH_BUFFER_BIT - attribute DEPTH_CLEAR_VALUE - attribute DEPTH_COMPONENT - attribute DEPTH_COMPONENT16 - attribute DEPTH_COMPONENT24 - attribute DEPTH_COMPONENT32F - attribute DEPTH_FUNC - attribute DEPTH_RANGE - attribute DEPTH_STENCIL - attribute DEPTH_STENCIL_ATTACHMENT - attribute DEPTH_TEST - attribute DEPTH_WRITEMASK - attribute DITHER - attribute DONT_CARE - attribute DRAW_BUFFER0 - attribute DRAW_BUFFER1 - attribute DRAW_BUFFER10 - attribute DRAW_BUFFER11 - attribute DRAW_BUFFER12 - attribute DRAW_BUFFER13 - attribute DRAW_BUFFER14 - attribute DRAW_BUFFER15 - attribute DRAW_BUFFER2 - attribute DRAW_BUFFER3 - attribute DRAW_BUFFER4 - attribute DRAW_BUFFER5 - attribute DRAW_BUFFER6 - attribute DRAW_BUFFER7 - attribute DRAW_BUFFER8 - attribute DRAW_BUFFER9 - attribute DRAW_FRAMEBUFFER - attribute DRAW_FRAMEBUFFER_BINDING - attribute DST_ALPHA - attribute DST_COLOR - attribute DYNAMIC_COPY - attribute DYNAMIC_DRAW - attribute DYNAMIC_READ - attribute ELEMENT_ARRAY_BUFFER - attribute ELEMENT_ARRAY_BUFFER_BINDING - attribute EQUAL - attribute FASTEST - attribute FLOAT - attribute FLOAT_32_UNSIGNED_INT_24_8_REV - attribute FLOAT_MAT2 - attribute FLOAT_MAT2x3 - attribute FLOAT_MAT2x4 - attribute FLOAT_MAT3 - attribute FLOAT_MAT3x2 - attribute FLOAT_MAT3x4 - attribute FLOAT_MAT4 - attribute FLOAT_MAT4x2 - attribute FLOAT_MAT4x3 - attribute FLOAT_VEC2 - attribute FLOAT_VEC3 - attribute FLOAT_VEC4 - attribute FRAGMENT_SHADER - attribute FRAGMENT_SHADER_DERIVATIVE_HINT - attribute FRAMEBUFFER - attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE - attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE - attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING - attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE - attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE - attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE - attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE - attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL - attribute FRAMEBUFFER_BINDING - attribute FRAMEBUFFER_COMPLETE - attribute FRAMEBUFFER_DEFAULT - attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT - attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS - attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT - attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE - attribute FRAMEBUFFER_UNSUPPORTED - attribute FRONT - attribute FRONT_AND_BACK - attribute FRONT_FACE - attribute FUNC_ADD - attribute FUNC_REVERSE_SUBTRACT - attribute FUNC_SUBTRACT - attribute GENERATE_MIPMAP_HINT - attribute GEQUAL - attribute GREATER - attribute GREEN_BITS - attribute HALF_FLOAT - attribute HIGH_FLOAT - attribute HIGH_INT - attribute IMPLEMENTATION_COLOR_READ_FORMAT - attribute IMPLEMENTATION_COLOR_READ_TYPE - attribute INCR - attribute INCR_WRAP - attribute INT - attribute INTERLEAVED_ATTRIBS - attribute INT_2_10_10_10_REV - attribute INT_SAMPLER_2D - attribute INT_SAMPLER_2D_ARRAY - attribute INT_SAMPLER_3D - attribute INT_SAMPLER_CUBE - attribute INT_VEC2 - attribute INT_VEC3 - attribute INT_VEC4 - attribute INVALID_ENUM - attribute INVALID_FRAMEBUFFER_OPERATION - attribute INVALID_INDEX - attribute INVALID_OPERATION - attribute INVALID_VALUE - attribute INVERT - attribute KEEP - attribute LEQUAL - attribute LESS - attribute LINEAR - attribute LINEAR_MIPMAP_LINEAR - attribute LINEAR_MIPMAP_NEAREST - attribute LINES - attribute LINE_LOOP - attribute LINE_STRIP - attribute LINE_WIDTH - attribute LINK_STATUS - attribute LOW_FLOAT - attribute LOW_INT - attribute LUMINANCE - attribute LUMINANCE_ALPHA - attribute MAX - attribute MAX_3D_TEXTURE_SIZE - attribute MAX_ARRAY_TEXTURE_LAYERS - attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL - attribute MAX_COLOR_ATTACHMENTS - attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS - attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS - attribute MAX_COMBINED_UNIFORM_BLOCKS - attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS - attribute MAX_CUBE_MAP_TEXTURE_SIZE - attribute MAX_DRAW_BUFFERS - attribute MAX_ELEMENTS_INDICES - attribute MAX_ELEMENTS_VERTICES - attribute MAX_ELEMENT_INDEX - attribute MAX_FRAGMENT_INPUT_COMPONENTS - attribute MAX_FRAGMENT_UNIFORM_BLOCKS - attribute MAX_FRAGMENT_UNIFORM_COMPONENTS - attribute MAX_FRAGMENT_UNIFORM_VECTORS - attribute MAX_PROGRAM_TEXEL_OFFSET - attribute MAX_RENDERBUFFER_SIZE - attribute MAX_SAMPLES - attribute MAX_SERVER_WAIT_TIMEOUT - attribute MAX_TEXTURE_IMAGE_UNITS - attribute MAX_TEXTURE_LOD_BIAS - attribute MAX_TEXTURE_SIZE - attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS - attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS - attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS - attribute MAX_UNIFORM_BLOCK_SIZE - attribute MAX_UNIFORM_BUFFER_BINDINGS - attribute MAX_VARYING_COMPONENTS - attribute MAX_VARYING_VECTORS - attribute MAX_VERTEX_ATTRIBS - attribute MAX_VERTEX_OUTPUT_COMPONENTS - attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS - attribute MAX_VERTEX_UNIFORM_BLOCKS - attribute MAX_VERTEX_UNIFORM_COMPONENTS - attribute MAX_VERTEX_UNIFORM_VECTORS - attribute MAX_VIEWPORT_DIMS - attribute MEDIUM_FLOAT - attribute MEDIUM_INT - attribute MIN - attribute MIN_PROGRAM_TEXEL_OFFSET - attribute MIRRORED_REPEAT - attribute NEAREST - attribute NEAREST_MIPMAP_LINEAR - attribute NEAREST_MIPMAP_NEAREST - attribute NEVER - attribute NICEST - attribute NONE - attribute NOTEQUAL - attribute NO_ERROR - attribute OBJECT_TYPE - attribute ONE - attribute ONE_MINUS_CONSTANT_ALPHA - attribute ONE_MINUS_CONSTANT_COLOR - attribute ONE_MINUS_DST_ALPHA - attribute ONE_MINUS_DST_COLOR - attribute ONE_MINUS_SRC_ALPHA - attribute ONE_MINUS_SRC_COLOR - attribute OUT_OF_MEMORY - attribute PACK_ALIGNMENT - attribute PACK_ROW_LENGTH - attribute PACK_SKIP_PIXELS - attribute PACK_SKIP_ROWS - attribute PIXEL_PACK_BUFFER - attribute PIXEL_PACK_BUFFER_BINDING - attribute PIXEL_UNPACK_BUFFER - attribute PIXEL_UNPACK_BUFFER_BINDING - attribute POINTS - attribute POLYGON_OFFSET_FACTOR - attribute POLYGON_OFFSET_FILL - attribute POLYGON_OFFSET_UNITS - attribute QUERY_RESULT - attribute QUERY_RESULT_AVAILABLE - attribute R11F_G11F_B10F - attribute R16F - attribute R16I - attribute R16UI - attribute R32F - attribute R32I - attribute R32UI - attribute R8 - attribute R8I - attribute R8UI - attribute R8_SNORM - attribute RASTERIZER_DISCARD - attribute READ_BUFFER - attribute READ_FRAMEBUFFER - attribute READ_FRAMEBUFFER_BINDING - attribute RED - attribute RED_BITS - attribute RED_INTEGER - attribute RENDERBUFFER - attribute RENDERBUFFER_ALPHA_SIZE - attribute RENDERBUFFER_BINDING - attribute RENDERBUFFER_BLUE_SIZE - attribute RENDERBUFFER_DEPTH_SIZE - attribute RENDERBUFFER_GREEN_SIZE - attribute RENDERBUFFER_HEIGHT - attribute RENDERBUFFER_INTERNAL_FORMAT - attribute RENDERBUFFER_RED_SIZE - attribute RENDERBUFFER_SAMPLES - attribute RENDERBUFFER_STENCIL_SIZE - attribute RENDERBUFFER_WIDTH - attribute RENDERER - attribute REPEAT - attribute REPLACE - attribute RG - attribute RG16F - attribute RG16I - attribute RG16UI - attribute RG32F - attribute RG32I - attribute RG32UI - attribute RG8 - attribute RG8I - attribute RG8UI - attribute RG8_SNORM - attribute RGB - attribute RGB10_A2 - attribute RGB10_A2UI - attribute RGB16F - attribute RGB16I - attribute RGB16UI - attribute RGB32F - attribute RGB32I - attribute RGB32UI - attribute RGB565 - attribute RGB5_A1 - attribute RGB8 - attribute RGB8I - attribute RGB8UI - attribute RGB8_SNORM - attribute RGB9_E5 - attribute RGBA - attribute RGBA16F - attribute RGBA16I - attribute RGBA16UI - attribute RGBA32F - attribute RGBA32I - attribute RGBA32UI - attribute RGBA4 - attribute RGBA8 - attribute RGBA8I - attribute RGBA8UI - attribute RGBA8_SNORM - attribute RGBA_INTEGER - attribute RGB_INTEGER - attribute RG_INTEGER - attribute SAMPLER_2D - attribute SAMPLER_2D_ARRAY - attribute SAMPLER_2D_ARRAY_SHADOW - attribute SAMPLER_2D_SHADOW - attribute SAMPLER_3D - attribute SAMPLER_BINDING - attribute SAMPLER_CUBE - attribute SAMPLER_CUBE_SHADOW - attribute SAMPLES - attribute SAMPLE_ALPHA_TO_COVERAGE - attribute SAMPLE_BUFFERS - attribute SAMPLE_COVERAGE - attribute SAMPLE_COVERAGE_INVERT - attribute SAMPLE_COVERAGE_VALUE - attribute SCISSOR_BOX - attribute SCISSOR_TEST - attribute SEPARATE_ATTRIBS - attribute SHADER_TYPE - attribute SHADING_LANGUAGE_VERSION - attribute SHORT - attribute SIGNALED - attribute SIGNED_NORMALIZED - attribute SRC_ALPHA - attribute SRC_ALPHA_SATURATE - attribute SRC_COLOR - attribute SRGB - attribute SRGB8 - attribute SRGB8_ALPHA8 - attribute STATIC_COPY - attribute STATIC_DRAW - attribute STATIC_READ - attribute STENCIL - attribute STENCIL_ATTACHMENT - attribute STENCIL_BACK_FAIL - attribute STENCIL_BACK_FUNC - attribute STENCIL_BACK_PASS_DEPTH_FAIL - attribute STENCIL_BACK_PASS_DEPTH_PASS - attribute STENCIL_BACK_REF - attribute STENCIL_BACK_VALUE_MASK - attribute STENCIL_BACK_WRITEMASK - attribute STENCIL_BITS - attribute STENCIL_BUFFER_BIT - attribute STENCIL_CLEAR_VALUE - attribute STENCIL_FAIL - attribute STENCIL_FUNC - attribute STENCIL_INDEX8 - attribute STENCIL_PASS_DEPTH_FAIL - attribute STENCIL_PASS_DEPTH_PASS - attribute STENCIL_REF - attribute STENCIL_TEST - attribute STENCIL_VALUE_MASK - attribute STENCIL_WRITEMASK - attribute STREAM_COPY - attribute STREAM_DRAW - attribute STREAM_READ - attribute SUBPIXEL_BITS - attribute SYNC_CONDITION - attribute SYNC_FENCE - attribute SYNC_FLAGS - attribute SYNC_FLUSH_COMMANDS_BIT - attribute SYNC_GPU_COMMANDS_COMPLETE - attribute SYNC_STATUS - attribute TEXTURE - attribute TEXTURE0 - attribute TEXTURE1 - attribute TEXTURE10 - attribute TEXTURE11 - attribute TEXTURE12 - attribute TEXTURE13 - attribute TEXTURE14 - attribute TEXTURE15 - attribute TEXTURE16 - attribute TEXTURE17 - attribute TEXTURE18 - attribute TEXTURE19 - attribute TEXTURE2 - attribute TEXTURE20 - attribute TEXTURE21 - attribute TEXTURE22 - attribute TEXTURE23 - attribute TEXTURE24 - attribute TEXTURE25 - attribute TEXTURE26 - attribute TEXTURE27 - attribute TEXTURE28 - attribute TEXTURE29 - attribute TEXTURE3 - attribute TEXTURE30 - attribute TEXTURE31 - attribute TEXTURE4 - attribute TEXTURE5 - attribute TEXTURE6 - attribute TEXTURE7 - attribute TEXTURE8 - attribute TEXTURE9 - attribute TEXTURE_2D - attribute TEXTURE_2D_ARRAY - attribute TEXTURE_3D - attribute TEXTURE_BASE_LEVEL - attribute TEXTURE_BINDING_2D - attribute TEXTURE_BINDING_2D_ARRAY - attribute TEXTURE_BINDING_3D - attribute TEXTURE_BINDING_CUBE_MAP - attribute TEXTURE_COMPARE_FUNC - attribute TEXTURE_COMPARE_MODE - attribute TEXTURE_CUBE_MAP - attribute TEXTURE_CUBE_MAP_NEGATIVE_X - attribute TEXTURE_CUBE_MAP_NEGATIVE_Y - attribute TEXTURE_CUBE_MAP_NEGATIVE_Z - attribute TEXTURE_CUBE_MAP_POSITIVE_X - attribute TEXTURE_CUBE_MAP_POSITIVE_Y - attribute TEXTURE_CUBE_MAP_POSITIVE_Z - attribute TEXTURE_IMMUTABLE_FORMAT - attribute TEXTURE_IMMUTABLE_LEVELS - attribute TEXTURE_MAG_FILTER - attribute TEXTURE_MAX_LEVEL - attribute TEXTURE_MAX_LOD - attribute TEXTURE_MIN_FILTER - attribute TEXTURE_MIN_LOD - attribute TEXTURE_WRAP_R - attribute TEXTURE_WRAP_S - attribute TEXTURE_WRAP_T - attribute TIMEOUT_EXPIRED - attribute TIMEOUT_IGNORED - attribute TRANSFORM_FEEDBACK - attribute TRANSFORM_FEEDBACK_ACTIVE - attribute TRANSFORM_FEEDBACK_BINDING - attribute TRANSFORM_FEEDBACK_BUFFER - attribute TRANSFORM_FEEDBACK_BUFFER_BINDING - attribute TRANSFORM_FEEDBACK_BUFFER_MODE - attribute TRANSFORM_FEEDBACK_BUFFER_SIZE - attribute TRANSFORM_FEEDBACK_BUFFER_START - attribute TRANSFORM_FEEDBACK_PAUSED - attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN - attribute TRANSFORM_FEEDBACK_VARYINGS - attribute TRIANGLES - attribute TRIANGLE_FAN - attribute TRIANGLE_STRIP - attribute UNIFORM_ARRAY_STRIDE - attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS - attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES - attribute UNIFORM_BLOCK_BINDING - attribute UNIFORM_BLOCK_DATA_SIZE - attribute UNIFORM_BLOCK_INDEX - attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER - attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER - attribute UNIFORM_BUFFER - attribute UNIFORM_BUFFER_BINDING - attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT - attribute UNIFORM_BUFFER_SIZE - attribute UNIFORM_BUFFER_START - attribute UNIFORM_IS_ROW_MAJOR - attribute UNIFORM_MATRIX_STRIDE - attribute UNIFORM_OFFSET - attribute UNIFORM_SIZE - attribute UNIFORM_TYPE - attribute UNPACK_ALIGNMENT - attribute UNPACK_COLORSPACE_CONVERSION_WEBGL - attribute UNPACK_FLIP_Y_WEBGL - attribute UNPACK_IMAGE_HEIGHT - attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL - attribute UNPACK_ROW_LENGTH - attribute UNPACK_SKIP_IMAGES - attribute UNPACK_SKIP_PIXELS - attribute UNPACK_SKIP_ROWS - attribute UNSIGNALED - attribute UNSIGNED_BYTE - attribute UNSIGNED_INT - attribute UNSIGNED_INT_10F_11F_11F_REV - attribute UNSIGNED_INT_24_8 - attribute UNSIGNED_INT_2_10_10_10_REV - attribute UNSIGNED_INT_5_9_9_9_REV - attribute UNSIGNED_INT_SAMPLER_2D - attribute UNSIGNED_INT_SAMPLER_2D_ARRAY - attribute UNSIGNED_INT_SAMPLER_3D - attribute UNSIGNED_INT_SAMPLER_CUBE - attribute UNSIGNED_INT_VEC2 - attribute UNSIGNED_INT_VEC3 - attribute UNSIGNED_INT_VEC4 - attribute UNSIGNED_NORMALIZED - attribute UNSIGNED_SHORT - attribute UNSIGNED_SHORT_4_4_4_4 - attribute UNSIGNED_SHORT_5_5_5_1 - attribute UNSIGNED_SHORT_5_6_5 - attribute VALIDATE_STATUS - attribute VENDOR - attribute VERSION - attribute VERTEX_ARRAY_BINDING - attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING - attribute VERTEX_ATTRIB_ARRAY_DIVISOR - attribute VERTEX_ATTRIB_ARRAY_ENABLED - attribute VERTEX_ATTRIB_ARRAY_INTEGER - attribute VERTEX_ATTRIB_ARRAY_NORMALIZED - attribute VERTEX_ATTRIB_ARRAY_POINTER - attribute VERTEX_ATTRIB_ARRAY_SIZE - attribute VERTEX_ATTRIB_ARRAY_STRIDE - attribute VERTEX_ATTRIB_ARRAY_TYPE - attribute VERTEX_SHADER - attribute VIEWPORT - attribute WAIT_FAILED - attribute ZERO - getter canvas - getter drawingBufferHeight - getter drawingBufferWidth - method activeTexture - method attachShader - method beginQuery - method beginTransformFeedback - method bindAttribLocation - method bindBuffer - method bindBufferBase - method bindBufferRange - method bindFramebuffer - method bindRenderbuffer - method bindSampler - method bindTexture - method bindTransformFeedback - method bindVertexArray - method blendColor - method blendEquation - method blendEquationSeparate - method blendFunc - method blendFuncSeparate - method blitFramebuffer - method bufferData - method bufferSubData - method checkFramebufferStatus - method clear - method clearBufferfi - method clearBufferfv - method clearBufferiv - method clearBufferuiv - method clearColor - method clearDepth - method clearStencil - method clientWaitSync - method colorMask - method commit - method compileShader - method compressedTexImage2D - method compressedTexImage3D - method compressedTexSubImage2D - method compressedTexSubImage3D - method constructor - method copyBufferSubData - method copyTexImage2D - method copyTexSubImage2D - method copyTexSubImage3D - method createBuffer - method createFramebuffer - method createProgram - method createQuery - method createRenderbuffer - method createSampler - method createShader - method createTexture - method createTransformFeedback - method createVertexArray - method cullFace - method deleteBuffer - method deleteFramebuffer - method deleteProgram - method deleteQuery - method deleteRenderbuffer - method deleteSampler - method deleteShader - method deleteSync - method deleteTexture - method deleteTransformFeedback - method deleteVertexArray - method depthFunc - method depthMask - method depthRange - method detachShader - method disable - method disableVertexAttribArray - method drawArrays - method drawArraysInstanced - method drawBuffers - method drawElements - method drawElementsInstanced - method drawRangeElements - method enable - method enableVertexAttribArray - method endQuery - method endTransformFeedback - method fenceSync - method finish - method flush - method framebufferRenderbuffer - method framebufferTexture2D - method framebufferTextureLayer - method frontFace - method generateMipmap - method getActiveAttrib - method getActiveUniform - method getActiveUniformBlockName - method getActiveUniformBlockParameter - method getActiveUniforms - method getAttachedShaders - method getAttribLocation - method getBufferParameter - method getBufferSubData - method getContextAttributes - method getError - method getExtension - method getFragDataLocation - method getFramebufferAttachmentParameter - method getIndexedParameter - method getInternalformatParameter - method getParameter - method getProgramInfoLog - method getProgramParameter - method getQuery - method getQueryParameter - method getRenderbufferParameter - method getSamplerParameter - method getShaderInfoLog - method getShaderParameter - method getShaderPrecisionFormat - method getShaderSource - method getSupportedExtensions - method getSyncParameter - method getTexParameter - method getTransformFeedbackVarying - method getUniform - method getUniformBlockIndex - method getUniformIndices - method getUniformLocation - method getVertexAttrib - method getVertexAttribOffset - method hint - method invalidateFramebuffer - method invalidateSubFramebuffer - method isBuffer - method isContextLost - method isEnabled - method isFramebuffer - method isProgram - method isQuery - method isRenderbuffer - method isSampler - method isShader - method isSync - method isTexture - method isTransformFeedback - method isVertexArray - method lineWidth - method linkProgram - method makeXRCompatible - method pauseTransformFeedback - method pixelStorei - method polygonOffset - method readBuffer - method readPixels - method renderbufferStorage - method renderbufferStorageMultisample - method resumeTransformFeedback - method sampleCoverage - method samplerParameterf - method samplerParameteri - method scissor - method shaderSource - method stencilFunc - method stencilFuncSeparate - method stencilMask - method stencilMaskSeparate - method stencilOp - method stencilOpSeparate - method texImage2D - method texImage3D - method texParameterf - method texParameteri - method texStorage2D - method texStorage3D - method texSubImage2D - method texSubImage3D - method transformFeedbackVaryings - method uniform1f - method uniform1fv - method uniform1i - method uniform1iv - method uniform1ui - method uniform1uiv - method uniform2f - method uniform2fv - method uniform2i - method uniform2iv - method uniform2ui - method uniform2uiv - method uniform3f - method uniform3fv - method uniform3i - method uniform3iv - method uniform3ui - method uniform3uiv - method uniform4f - method uniform4fv - method uniform4i - method uniform4iv - method uniform4ui - method uniform4uiv - method uniformBlockBinding - method uniformMatrix2fv - method uniformMatrix2x3fv - method uniformMatrix2x4fv - method uniformMatrix3fv - method uniformMatrix3x2fv - method uniformMatrix3x4fv - method uniformMatrix4fv - method uniformMatrix4x2fv - method uniformMatrix4x3fv - method useProgram - method validateProgram - method vertexAttrib1f - method vertexAttrib1fv - method vertexAttrib2f - method vertexAttrib2fv - method vertexAttrib3f - method vertexAttrib3fv - method vertexAttrib4f - method vertexAttrib4fv - method vertexAttribDivisor - method vertexAttribI4i - method vertexAttribI4iv - method vertexAttribI4ui - method vertexAttribI4uiv - method vertexAttribIPointer - method vertexAttribPointer - method viewport - method waitSync -interface WebGLActiveInfo - attribute @@toStringTag - getter name - getter size - getter type - method constructor -interface WebGLBuffer - attribute @@toStringTag - method constructor -interface WebGLContextEvent : Event - attribute @@toStringTag - getter statusMessage - method constructor -interface WebGLFramebuffer - attribute @@toStringTag - method constructor -interface WebGLProgram - attribute @@toStringTag - method constructor -interface WebGLQuery - attribute @@toStringTag - method constructor -interface WebGLRenderbuffer - attribute @@toStringTag - method constructor -interface WebGLRenderingContext - attribute @@toStringTag - attribute ACTIVE_ATTRIBUTES - attribute ACTIVE_TEXTURE - attribute ACTIVE_UNIFORMS - attribute ALIASED_LINE_WIDTH_RANGE - attribute ALIASED_POINT_SIZE_RANGE - attribute ALPHA - attribute ALPHA_BITS - attribute ALWAYS - attribute ARRAY_BUFFER - attribute ARRAY_BUFFER_BINDING - attribute ATTACHED_SHADERS - attribute BACK - attribute BLEND - attribute BLEND_COLOR - attribute BLEND_DST_ALPHA - attribute BLEND_DST_RGB - attribute BLEND_EQUATION - attribute BLEND_EQUATION_ALPHA - attribute BLEND_EQUATION_RGB - attribute BLEND_SRC_ALPHA - attribute BLEND_SRC_RGB - attribute BLUE_BITS - attribute BOOL - attribute BOOL_VEC2 - attribute BOOL_VEC3 - attribute BOOL_VEC4 - attribute BROWSER_DEFAULT_WEBGL - attribute BUFFER_SIZE - attribute BUFFER_USAGE - attribute BYTE - attribute CCW - attribute CLAMP_TO_EDGE - attribute COLOR_ATTACHMENT0 - attribute COLOR_BUFFER_BIT - attribute COLOR_CLEAR_VALUE - attribute COLOR_WRITEMASK - attribute COMPILE_STATUS - attribute COMPRESSED_TEXTURE_FORMATS - attribute CONSTANT_ALPHA - attribute CONSTANT_COLOR - attribute CONTEXT_LOST_WEBGL - attribute CULL_FACE - attribute CULL_FACE_MODE - attribute CURRENT_PROGRAM - attribute CURRENT_VERTEX_ATTRIB - attribute CW - attribute DECR - attribute DECR_WRAP - attribute DELETE_STATUS - attribute DEPTH_ATTACHMENT - attribute DEPTH_BITS - attribute DEPTH_BUFFER_BIT - attribute DEPTH_CLEAR_VALUE - attribute DEPTH_COMPONENT - attribute DEPTH_COMPONENT16 - attribute DEPTH_FUNC - attribute DEPTH_RANGE - attribute DEPTH_STENCIL - attribute DEPTH_STENCIL_ATTACHMENT - attribute DEPTH_TEST - attribute DEPTH_WRITEMASK - attribute DITHER - attribute DONT_CARE - attribute DST_ALPHA - attribute DST_COLOR - attribute DYNAMIC_DRAW - attribute ELEMENT_ARRAY_BUFFER - attribute ELEMENT_ARRAY_BUFFER_BINDING - attribute EQUAL - attribute FASTEST - attribute FLOAT - attribute FLOAT_MAT2 - attribute FLOAT_MAT3 - attribute FLOAT_MAT4 - attribute FLOAT_VEC2 - attribute FLOAT_VEC3 - attribute FLOAT_VEC4 - attribute FRAGMENT_SHADER - attribute FRAMEBUFFER - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME - attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE - attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL - attribute FRAMEBUFFER_BINDING - attribute FRAMEBUFFER_COMPLETE - attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT - attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS - attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT - attribute FRAMEBUFFER_UNSUPPORTED - attribute FRONT - attribute FRONT_AND_BACK - attribute FRONT_FACE - attribute FUNC_ADD - attribute FUNC_REVERSE_SUBTRACT - attribute FUNC_SUBTRACT - attribute GENERATE_MIPMAP_HINT - attribute GEQUAL - attribute GREATER - attribute GREEN_BITS - attribute HIGH_FLOAT - attribute HIGH_INT - attribute IMPLEMENTATION_COLOR_READ_FORMAT - attribute IMPLEMENTATION_COLOR_READ_TYPE - attribute INCR - attribute INCR_WRAP - attribute INT - attribute INT_VEC2 - attribute INT_VEC3 - attribute INT_VEC4 - attribute INVALID_ENUM - attribute INVALID_FRAMEBUFFER_OPERATION - attribute INVALID_OPERATION - attribute INVALID_VALUE - attribute INVERT - attribute KEEP - attribute LEQUAL - attribute LESS - attribute LINEAR - attribute LINEAR_MIPMAP_LINEAR - attribute LINEAR_MIPMAP_NEAREST - attribute LINES - attribute LINE_LOOP - attribute LINE_STRIP - attribute LINE_WIDTH - attribute LINK_STATUS - attribute LOW_FLOAT - attribute LOW_INT - attribute LUMINANCE - attribute LUMINANCE_ALPHA - attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS - attribute MAX_CUBE_MAP_TEXTURE_SIZE - attribute MAX_FRAGMENT_UNIFORM_VECTORS - attribute MAX_RENDERBUFFER_SIZE - attribute MAX_TEXTURE_IMAGE_UNITS - attribute MAX_TEXTURE_SIZE - attribute MAX_VARYING_VECTORS - attribute MAX_VERTEX_ATTRIBS - attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS - attribute MAX_VERTEX_UNIFORM_VECTORS - attribute MAX_VIEWPORT_DIMS - attribute MEDIUM_FLOAT - attribute MEDIUM_INT - attribute MIRRORED_REPEAT - attribute NEAREST - attribute NEAREST_MIPMAP_LINEAR - attribute NEAREST_MIPMAP_NEAREST - attribute NEVER - attribute NICEST - attribute NONE - attribute NOTEQUAL - attribute NO_ERROR - attribute ONE - attribute ONE_MINUS_CONSTANT_ALPHA - attribute ONE_MINUS_CONSTANT_COLOR - attribute ONE_MINUS_DST_ALPHA - attribute ONE_MINUS_DST_COLOR - attribute ONE_MINUS_SRC_ALPHA - attribute ONE_MINUS_SRC_COLOR - attribute OUT_OF_MEMORY - attribute PACK_ALIGNMENT - attribute POINTS - attribute POLYGON_OFFSET_FACTOR - attribute POLYGON_OFFSET_FILL - attribute POLYGON_OFFSET_UNITS - attribute RED_BITS - attribute RENDERBUFFER - attribute RENDERBUFFER_ALPHA_SIZE - attribute RENDERBUFFER_BINDING - attribute RENDERBUFFER_BLUE_SIZE - attribute RENDERBUFFER_DEPTH_SIZE - attribute RENDERBUFFER_GREEN_SIZE - attribute RENDERBUFFER_HEIGHT - attribute RENDERBUFFER_INTERNAL_FORMAT - attribute RENDERBUFFER_RED_SIZE - attribute RENDERBUFFER_STENCIL_SIZE - attribute RENDERBUFFER_WIDTH - attribute RENDERER - attribute REPEAT - attribute REPLACE - attribute RGB - attribute RGB565 - attribute RGB5_A1 - attribute RGBA - attribute RGBA4 - attribute SAMPLER_2D - attribute SAMPLER_CUBE - attribute SAMPLES - attribute SAMPLE_ALPHA_TO_COVERAGE - attribute SAMPLE_BUFFERS - attribute SAMPLE_COVERAGE - attribute SAMPLE_COVERAGE_INVERT - attribute SAMPLE_COVERAGE_VALUE - attribute SCISSOR_BOX - attribute SCISSOR_TEST - attribute SHADER_TYPE - attribute SHADING_LANGUAGE_VERSION - attribute SHORT - attribute SRC_ALPHA - attribute SRC_ALPHA_SATURATE - attribute SRC_COLOR - attribute STATIC_DRAW - attribute STENCIL_ATTACHMENT - attribute STENCIL_BACK_FAIL - attribute STENCIL_BACK_FUNC - attribute STENCIL_BACK_PASS_DEPTH_FAIL - attribute STENCIL_BACK_PASS_DEPTH_PASS - attribute STENCIL_BACK_REF - attribute STENCIL_BACK_VALUE_MASK - attribute STENCIL_BACK_WRITEMASK - attribute STENCIL_BITS - attribute STENCIL_BUFFER_BIT - attribute STENCIL_CLEAR_VALUE - attribute STENCIL_FAIL - attribute STENCIL_FUNC - attribute STENCIL_INDEX8 - attribute STENCIL_PASS_DEPTH_FAIL - attribute STENCIL_PASS_DEPTH_PASS - attribute STENCIL_REF - attribute STENCIL_TEST - attribute STENCIL_VALUE_MASK - attribute STENCIL_WRITEMASK - attribute STREAM_DRAW - attribute SUBPIXEL_BITS - attribute TEXTURE - attribute TEXTURE0 - attribute TEXTURE1 - attribute TEXTURE10 - attribute TEXTURE11 - attribute TEXTURE12 - attribute TEXTURE13 - attribute TEXTURE14 - attribute TEXTURE15 - attribute TEXTURE16 - attribute TEXTURE17 - attribute TEXTURE18 - attribute TEXTURE19 - attribute TEXTURE2 - attribute TEXTURE20 - attribute TEXTURE21 - attribute TEXTURE22 - attribute TEXTURE23 - attribute TEXTURE24 - attribute TEXTURE25 - attribute TEXTURE26 - attribute TEXTURE27 - attribute TEXTURE28 - attribute TEXTURE29 - attribute TEXTURE3 - attribute TEXTURE30 - attribute TEXTURE31 - attribute TEXTURE4 - attribute TEXTURE5 - attribute TEXTURE6 - attribute TEXTURE7 - attribute TEXTURE8 - attribute TEXTURE9 - attribute TEXTURE_2D - attribute TEXTURE_BINDING_2D - attribute TEXTURE_BINDING_CUBE_MAP - attribute TEXTURE_CUBE_MAP - attribute TEXTURE_CUBE_MAP_NEGATIVE_X - attribute TEXTURE_CUBE_MAP_NEGATIVE_Y - attribute TEXTURE_CUBE_MAP_NEGATIVE_Z - attribute TEXTURE_CUBE_MAP_POSITIVE_X - attribute TEXTURE_CUBE_MAP_POSITIVE_Y - attribute TEXTURE_CUBE_MAP_POSITIVE_Z - attribute TEXTURE_MAG_FILTER - attribute TEXTURE_MIN_FILTER - attribute TEXTURE_WRAP_S - attribute TEXTURE_WRAP_T - attribute TRIANGLES - attribute TRIANGLE_FAN - attribute TRIANGLE_STRIP - attribute UNPACK_ALIGNMENT - attribute UNPACK_COLORSPACE_CONVERSION_WEBGL - attribute UNPACK_FLIP_Y_WEBGL - attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL - attribute UNSIGNED_BYTE - attribute UNSIGNED_INT - attribute UNSIGNED_SHORT - attribute UNSIGNED_SHORT_4_4_4_4 - attribute UNSIGNED_SHORT_5_5_5_1 - attribute UNSIGNED_SHORT_5_6_5 - attribute VALIDATE_STATUS - attribute VENDOR - attribute VERSION - attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING - attribute VERTEX_ATTRIB_ARRAY_ENABLED - attribute VERTEX_ATTRIB_ARRAY_NORMALIZED - attribute VERTEX_ATTRIB_ARRAY_POINTER - attribute VERTEX_ATTRIB_ARRAY_SIZE - attribute VERTEX_ATTRIB_ARRAY_STRIDE - attribute VERTEX_ATTRIB_ARRAY_TYPE - attribute VERTEX_SHADER - attribute VIEWPORT - attribute ZERO - getter canvas - getter drawingBufferHeight - getter drawingBufferWidth - method activeTexture - method attachShader - method bindAttribLocation - method bindBuffer - method bindFramebuffer - method bindRenderbuffer - method bindTexture - method blendColor - method blendEquation - method blendEquationSeparate - method blendFunc - method blendFuncSeparate - method bufferData - method bufferSubData - method checkFramebufferStatus - method clear - method clearColor - method clearDepth - method clearStencil - method colorMask - method commit - method compileShader - method compressedTexImage2D - method compressedTexSubImage2D - method constructor - method copyTexImage2D - method copyTexSubImage2D - method createBuffer - method createFramebuffer - method createProgram - method createRenderbuffer - method createShader - method createTexture - method cullFace - method deleteBuffer - method deleteFramebuffer - method deleteProgram - method deleteRenderbuffer - method deleteShader - method deleteTexture - method depthFunc - method depthMask - method depthRange - method detachShader - method disable - method disableVertexAttribArray - method drawArrays - method drawElements - method enable - method enableVertexAttribArray - method finish - method flush - method framebufferRenderbuffer - method framebufferTexture2D - method frontFace - method generateMipmap - method getActiveAttrib - method getActiveUniform - method getAttachedShaders - method getAttribLocation - method getBufferParameter - method getContextAttributes - method getError - method getExtension - method getFramebufferAttachmentParameter - method getParameter - method getProgramInfoLog - method getProgramParameter - method getRenderbufferParameter - method getShaderInfoLog - method getShaderParameter - method getShaderPrecisionFormat - method getShaderSource - method getSupportedExtensions - method getTexParameter - method getUniform - method getUniformLocation - method getVertexAttrib - method getVertexAttribOffset - method hint - method isBuffer - method isContextLost - method isEnabled - method isFramebuffer - method isProgram - method isRenderbuffer - method isShader - method isTexture - method lineWidth - method linkProgram - method makeXRCompatible - method pixelStorei - method polygonOffset - method readPixels - method renderbufferStorage - method sampleCoverage - method scissor - method shaderSource - method stencilFunc - method stencilFuncSeparate - method stencilMask - method stencilMaskSeparate - method stencilOp - method stencilOpSeparate - method texImage2D - method texParameterf - method texParameteri - method texSubImage2D - method uniform1f - method uniform1fv - method uniform1i - method uniform1iv - method uniform2f - method uniform2fv - method uniform2i - method uniform2iv - method uniform3f - method uniform3fv - method uniform3i - method uniform3iv - method uniform4f - method uniform4fv - method uniform4i - method uniform4iv - method uniformMatrix2fv - method uniformMatrix3fv - method uniformMatrix4fv - method useProgram - method validateProgram - method vertexAttrib1f - method vertexAttrib1fv - method vertexAttrib2f - method vertexAttrib2fv - method vertexAttrib3f - method vertexAttrib3fv - method vertexAttrib4f - method vertexAttrib4fv - method vertexAttribPointer - method viewport -interface WebGLSampler - attribute @@toStringTag - method constructor -interface WebGLShader - attribute @@toStringTag - method constructor -interface WebGLShaderPrecisionFormat - attribute @@toStringTag - getter precision - getter rangeMax - getter rangeMin - method constructor -interface WebGLSync - attribute @@toStringTag - method constructor -interface WebGLTexture - attribute @@toStringTag - method constructor -interface WebGLTransformFeedback - attribute @@toStringTag - method constructor -interface WebGLUniformLocation - attribute @@toStringTag - method constructor -interface WebGLVertexArrayObject - attribute @@toStringTag - method constructor -interface WebGLVideoFrameMetadata - attribute @@toStringTag - getter captureTime - getter elapsedProcessingTime - getter expectedPresentationTime - getter height - getter presentationTime - getter presentationTimestamp - getter presentedFrames - getter rtpTimestamp - getter width - method constructor -interface WebKitCSSMatrix : DOMMatrixReadOnly - attribute @@toStringTag - getter a - getter b - getter c - getter d - getter e - getter f - getter m11 - getter m12 - getter m13 - getter m14 - getter m21 - getter m22 - getter m23 - getter m24 - getter m31 - getter m32 - getter m33 - getter m34 - getter m41 - getter m42 - getter m43 - getter m44 - method constructor - method invertSelf - method multiplySelf - method preMultiplySelf - method rotateAxisAngleSelf - method rotateFromVectorSelf - method rotateSelf - method scale3dSelf - method scaleSelf - method setMatrixValue - method skewXSelf - method skewYSelf - method translateSelf - setter a - setter b - setter c - setter d - setter e - setter f - setter m11 - setter m12 - setter m13 - setter m14 - setter m21 - setter m22 - setter m23 - setter m24 - setter m31 - setter m32 - setter m33 - setter m34 - setter m41 - setter m42 - setter m43 - setter m44 -interface WebKitMutationObserver - attribute @@toStringTag - method constructor - method disconnect - method observe - method takeRecords -interface WebSocket : EventTarget - attribute @@toStringTag - attribute CLOSED - attribute CLOSING - attribute CONNECTING - attribute OPEN - getter binaryType - getter bufferedAmount - getter extensions - getter onclose - getter onerror - getter onmessage - getter onopen - getter protocol - getter readyState - getter url - method close - method constructor - method send - setter binaryType - setter onclose - setter onerror - setter onmessage - setter onopen -interface WebSocketStream - attribute @@toStringTag - getter closed - getter connection - getter url - method close - method constructor -interface WheelEvent : MouseEvent - attribute @@toStringTag - attribute DOM_DELTA_LINE - attribute DOM_DELTA_PAGE - attribute DOM_DELTA_PIXEL - getter deltaMode - getter deltaX - getter deltaY - getter deltaZ - getter wheelDelta - getter wheelDeltaX - getter wheelDeltaY - method constructor -interface Window : EventTarget - attribute @@toStringTag - attribute PERSISTENT - attribute TEMPORARY - method constructor -interface Worker : EventTarget - attribute @@toStringTag - getter onerror - getter onmessage - method constructor - method postMessage - method terminate - setter onerror - setter onmessage -interface Worklet - attribute @@toStringTag - method addModule - method constructor -interface WorkletAnimation - attribute @@toStringTag - getter animatorName - getter currentTime - getter effect - getter playState - getter playbackRate - getter startTime - getter timeline - method cancel - method constructor - method pause - method play - setter playbackRate -interface WritableStream - attribute @@toStringTag - getter locked - method abort - method constructor - method getWriter -interface WritableStreamDefaultWriter - attribute @@toStringTag - getter closed - getter desiredSize - getter ready - method abort - method close - method constructor - method releaseLock - method write -interface XMLDocument : Document - attribute @@toStringTag - method constructor -interface XMLHttpRequest : XMLHttpRequestEventTarget - attribute @@toStringTag - attribute DONE - attribute HEADERS_RECEIVED - attribute LOADING - attribute OPENED - attribute UNSENT - getter onreadystatechange - getter readyState - getter response - getter responseText - getter responseType - getter responseURL - getter responseXML - getter status - getter statusText - getter timeout - getter upload - getter withCredentials - method abort - method constructor - method getAllResponseHeaders - method getResponseHeader - method open - method overrideMimeType - method send - method setRequestHeader - setter onreadystatechange - setter responseType - setter timeout - setter withCredentials -interface XMLHttpRequestEventTarget : EventTarget - attribute @@toStringTag - getter onabort - getter onerror - getter onload - getter onloadend - getter onloadstart - getter onprogress - getter ontimeout - method constructor - setter onabort - setter onerror - setter onload - setter onloadend - setter onloadstart - setter onprogress - setter ontimeout -interface XMLHttpRequestUpload : XMLHttpRequestEventTarget - attribute @@toStringTag - method constructor -interface XMLSerializer - attribute @@toStringTag - method constructor - method serializeToString -interface XPathEvaluator - attribute @@toStringTag - method constructor - method createExpression - method createNSResolver - method evaluate -interface XPathExpression - attribute @@toStringTag - method constructor - method evaluate -interface XPathResult - attribute @@toStringTag - attribute ANY_TYPE - attribute ANY_UNORDERED_NODE_TYPE - attribute BOOLEAN_TYPE - attribute FIRST_ORDERED_NODE_TYPE - attribute NUMBER_TYPE - attribute ORDERED_NODE_ITERATOR_TYPE - attribute ORDERED_NODE_SNAPSHOT_TYPE - attribute STRING_TYPE - attribute UNORDERED_NODE_ITERATOR_TYPE - attribute UNORDERED_NODE_SNAPSHOT_TYPE - getter booleanValue - getter invalidIteratorState - getter numberValue - getter resultType - getter singleNodeValue - getter snapshotLength - getter stringValue - method constructor - method iterateNext - method snapshotItem -interface XR : EventTarget - attribute @@toStringTag - getter ondevicechange - method constructor - method isSessionSupported - method requestSession - method supportsSession - setter ondevicechange -interface XRBoundedReferenceSpace : XRReferenceSpace - attribute @@toStringTag - getter boundsGeometry - method constructor -interface XRFrame - attribute @@toStringTag - getter session - method constructor - method getHitTestResults - method getHitTestResultsForTransientInput - method getPose - method getViewerPose -interface XRHitResult - attribute @@toStringTag - getter hitMatrix - method constructor -interface XRHitTestResult - attribute @@toStringTag - method constructor - method getPose -interface XRHitTestSource - attribute @@toStringTag - method cancel - method constructor -interface XRInputSource - attribute @@toStringTag - getter gamepad - getter gripSpace - getter handedness - getter profiles - getter targetRayMode - getter targetRaySpace - method constructor -interface XRInputSourceArray - attribute @@toStringTag - getter length - method @@iterator - method constructor - method entries - method forEach - method keys - method values -interface XRInputSourceEvent : Event - attribute @@toStringTag - getter frame - getter inputSource - method constructor -interface XRInputSourcesChangeEvent : Event - attribute @@toStringTag - getter added - getter removed - getter session - method constructor -interface XRPose - attribute @@toStringTag - getter emulatedPosition - getter transform - method constructor -interface XRRay - attribute @@toStringTag - getter direction - getter matrix - getter origin - method constructor -interface XRReferenceSpace : XRSpace - attribute @@toStringTag - getter onreset - method constructor - method getOffsetReferenceSpace - setter onreset -interface XRReferenceSpaceEvent : Event - attribute @@toStringTag - getter referenceSpace - getter transform - method constructor -interface XRRenderState - attribute @@toStringTag - getter baseLayer - getter depthFar - getter depthNear - getter inlineVerticalFieldOfView - method constructor -interface XRRigidTransform - attribute @@toStringTag - getter inverse - getter matrix - getter orientation - getter position - method constructor -interface XRSession : EventTarget - attribute @@toStringTag - getter environmentBlendMode - getter inputSources - getter onend - getter oninputsourceschange - getter onselect - getter onselectend - getter onselectstart - getter onvisibilitychange - getter renderState - getter visibilityState - method cancelAnimationFrame - method constructor - method end - method requestAnimationFrame - method requestHitTest - method requestHitTestSource - method requestHitTestSourceForTransientInput - method requestReferenceSpace - method updateRenderState - setter onend - setter oninputsourceschange - setter onselect - setter onselectend - setter onselectstart - setter onvisibilitychange -interface XRSessionEvent : Event - attribute @@toStringTag - getter session - method constructor -interface XRSpace : EventTarget - attribute @@toStringTag - method constructor -interface XRTransientInputHitTestResult - attribute @@toStringTag - getter inputSource - getter results - method constructor -interface XRTransientInputHitTestSource - attribute @@toStringTag - method cancel - method constructor -interface XRView - attribute @@toStringTag - getter eye - getter projectionMatrix - getter transform - method constructor -interface XRViewerPose : XRPose - attribute @@toStringTag - getter views - method constructor -interface XRViewport - attribute @@toStringTag - getter height - getter width - getter x - getter y - method constructor -interface XRWebGLLayer - static method getNativeFramebufferScaleFactor - attribute @@toStringTag - getter antialias - getter framebuffer - getter framebufferHeight - getter framebufferWidth - getter ignoreDepthValues - method constructor - method getViewport -interface XSLTProcessor - attribute @@toStringTag - method clearParameters - method constructor - method getParameter - method importStylesheet - method removeParameter - method reset - method setParameter - method transformToDocument - method transformToFragment -interface webkitMediaStream : EventTarget - attribute @@toStringTag - getter active - getter id - getter onactive - getter onaddtrack - getter oninactive - getter onremovetrack - method addTrack - method clone - method constructor - method getAudioTracks - method getTrackById - method getTracks - method getVideoTracks - method removeTrack - setter onactive - setter onaddtrack - setter oninactive - setter onremovetrack -interface webkitRTCPeerConnection : EventTarget - static method generateCertificate - attribute @@toStringTag - getter connectionState - getter currentLocalDescription - getter currentRemoteDescription - getter iceConnectionState - getter iceGatheringState - getter localDescription - getter onaddstream - getter onconnectionstatechange - getter ondatachannel - getter onicecandidate - getter onicecandidateerror - getter oniceconnectionstatechange - getter onicegatheringstatechange - getter onnegotiationneeded - getter onremovestream - getter onsignalingstatechange - getter ontrack - getter pendingLocalDescription - getter pendingRemoteDescription - getter remoteDescription - getter sctp - getter signalingState - method addIceCandidate - method addStream - method addTrack - method addTransceiver - method close - method constructor - method createAnswer - method createDTMFSender - method createDataChannel - method createOffer - method getConfiguration - method getLocalStreams - method getReceivers - method getRemoteStreams - method getSenders - method getStats - method getTransceivers - method removeStream - method removeTrack - method restartIce - method setConfiguration - method setLocalDescription - method setRemoteDescription - setter onaddstream - setter onconnectionstatechange - setter ondatachannel - setter onicecandidate - setter onicecandidateerror - setter oniceconnectionstatechange - setter onicegatheringstatechange - setter onnegotiationneeded - setter onremovestream - setter onsignalingstatechange - setter ontrack -interface webkitSpeechGrammar - attribute @@toStringTag - getter src - getter weight - method constructor - setter src - setter weight -interface webkitSpeechGrammarList - attribute @@toStringTag - getter length - method @@iterator - method addFromString - method addFromUri - method constructor - method item -interface webkitSpeechRecognition : EventTarget - attribute @@toStringTag - getter continuous - getter grammars - getter interimResults - getter lang - getter maxAlternatives - getter onaudioend - getter onaudiostart - getter onend - getter onerror - getter onnomatch - getter onresult - getter onsoundend - getter onsoundstart - getter onspeechend - getter onspeechstart - getter onstart - method abort - method constructor - method start - method stop - setter continuous - setter grammars - setter interimResults - setter lang - setter maxAlternatives - setter onaudioend - setter onaudiostart - setter onend - setter onerror - setter onnomatch - setter onresult - setter onsoundend - setter onsoundstart - setter onspeechend - setter onspeechstart - setter onstart -interface webkitSpeechRecognitionError : Event - attribute @@toStringTag - getter error - getter message - method constructor -interface webkitSpeechRecognitionEvent : Event - attribute @@toStringTag - getter emma - getter interpretation - getter resultIndex - getter results - method constructor -interface webkitURL - static method createObjectURL - static method revokeObjectURL - attribute @@toStringTag - getter hash - getter host - getter hostname - getter href - getter origin - getter password - getter pathname - getter port - getter protocol - getter search - getter searchParams - getter username - method constructor - method toJSON - method toString - setter hash - setter host - setter hostname - setter href - setter password - setter pathname - setter port - setter protocol - setter search - setter username -[GLOBAL OBJECT] - attribute GCController - attribute accessibilityController - attribute chrome - attribute closed - attribute console - attribute eventSender - attribute frames - attribute gamepadController - attribute globalThis - attribute internals - attribute length - attribute location - attribute opener - attribute parent - attribute propertyNamesInGlobal - attribute self - attribute testRunner - attribute textInputController - attribute top - attribute window - getter applicationCache - getter caches - getter clientInformation - getter cookieStore - getter crypto - getter customElements - getter defaultStatus - getter defaultstatus - getter devicePixelRatio - getter document - getter event - getter external - getter frameElement - getter history - getter indexedDB - getter innerHeight - getter innerWidth - getter isSecureContext - getter localStorage - getter locationbar - getter menubar - getter name - getter navigator - getter offscreenBuffering - getter onabort - getter onactivateinvisible - getter onafterprint - getter onanimationend - getter onanimationiteration - getter onanimationstart - getter onappinstalled - getter onauxclick - getter onbeforeinstallprompt - getter onbeforeprint - getter onbeforeunload - getter onblur - getter oncancel - getter oncanplay - getter oncanplaythrough - getter onchange - getter onclick - getter onclose - getter oncontextmenu - getter oncuechange - getter ondblclick - getter ondevicemotion - getter ondeviceorientation - getter ondeviceorientationabsolute - getter ondrag - getter ondragend - getter ondragenter - getter ondragleave - getter ondragover - getter ondragstart - getter ondrop - getter ondurationchange - getter onemptied - getter onended - getter onerror - getter onfocus - getter onformdata - getter ongotpointercapture - getter onhashchange - getter oninput - getter oninvalid - getter onkeydown - getter onkeypress - getter onkeyup - getter onlanguagechange - getter onload - getter onloadeddata - getter onloadedmetadata - getter onloadstart - getter onlostpointercapture - getter onmessage - getter onmessageerror - getter onmousedown - getter onmouseenter - getter onmouseleave - getter onmousemove - getter onmouseout - getter onmouseover - getter onmouseup - getter onmousewheel - getter onoffline - getter ononline - getter onoverscroll - getter onpagehide - getter onpageshow - getter onpause - getter onplay - getter onplaying - getter onpointercancel - getter onpointerdown - getter onpointerenter - getter onpointerleave - getter onpointermove - getter onpointerout - getter onpointerover - getter onpointerrawupdate - getter onpointerup - getter onpopstate - getter onportalactivate - getter onprogress - getter onratechange - getter onrejectionhandled - getter onrendersubtreeactivation - getter onreset - getter onresize - getter onscroll - getter onscrollend - getter onsearch - getter onseeked - getter onseeking - getter onselect - getter onselectionchange - getter onselectstart - getter onstalled - getter onstorage - getter onsubmit - getter onsuspend - getter ontimeupdate - getter ontoggle - getter ontouchcancel - getter ontouchend - getter ontouchmove - getter ontouchstart - getter ontransitionend - getter onunhandledrejection - getter onunload - getter onvolumechange - getter onwaiting - getter onwebkitanimationend - getter onwebkitanimationiteration - getter onwebkitanimationstart - getter onwebkittransitionend - getter onwheel - getter origin - getter outerHeight - getter outerWidth - getter pageXOffset - getter pageYOffset - getter performance - getter personalbar - getter portalHost - getter scheduler - getter screen - getter screenLeft - getter screenTop - getter screenX - getter screenY - getter scrollX - getter scrollY - getter scrollbars - getter sessionStorage - getter speechSynthesis - getter status - getter statusbar - getter styleMedia - getter toolbar - getter trustedTypes - getter visualViewport - getter webkitStorageInfo - method NodeFilter - method alert - method atob - method blur - method btoa - method cancelAnimationFrame - method cancelIdleCallback - method cancelPostAnimationFrame - method captureEvents - method chooseFileSystemEntries - method clearInterval - method clearTimeout - method close - method confirm - method createImageBitmap - method fetch - method find - method focus - method gc - method getComputedAccessibleNode - method getComputedStyle - method getSelection - method matchMedia - method moveBy - method moveTo - method open - method openDatabase - method postMessage - method print - method prompt - method queueMicrotask - method releaseEvents - method requestAnimationFrame - method requestIdleCallback - method requestPostAnimationFrame - method resizeBy - method resizeTo - method scroll - method scrollBy - method scrollTo - method setInterval - method setTimeout - method stop - method webkitCancelAnimationFrame - method webkitRequestAnimationFrame - method webkitRequestFileSystem - method webkitResolveLocalFileSystemURL - setter clientInformation - setter cookieStore - setter defaultStatus - setter defaultstatus - setter devicePixelRatio - setter event - setter external - setter innerHeight - setter innerWidth - setter locationbar - setter menubar - setter name - setter offscreenBuffering - setter onabort - setter onactivateinvisible - setter onafterprint - setter onanimationend - setter onanimationiteration - setter onanimationstart - setter onappinstalled - setter onauxclick - setter onbeforeinstallprompt - setter onbeforeprint - setter onbeforeunload - setter onblur - setter oncancel - setter oncanplay - setter oncanplaythrough - setter onchange - setter onclick - setter onclose - setter oncontextmenu - setter oncuechange - setter ondblclick - setter ondevicemotion - setter ondeviceorientation - setter ondeviceorientationabsolute - setter ondrag - setter ondragend - setter ondragenter - setter ondragleave - setter ondragover - setter ondragstart - setter ondrop - setter ondurationchange - setter onemptied - setter onended - setter onerror - setter onfocus - setter onformdata - setter ongotpointercapture - setter onhashchange - setter oninput - setter oninvalid - setter onkeydown - setter onkeypress - setter onkeyup - setter onlanguagechange - setter onload - setter onloadeddata - setter onloadedmetadata - setter onloadstart - setter onlostpointercapture - setter onmessage - setter onmessageerror - setter onmousedown - setter onmouseenter - setter onmouseleave - setter onmousemove - setter onmouseout - setter onmouseover - setter onmouseup - setter onmousewheel - setter onoffline - setter ononline - setter onoverscroll - setter onpagehide - setter onpageshow - setter onpause - setter onplay - setter onplaying - setter onpointercancel - setter onpointerdown - setter onpointerenter - setter onpointerleave - setter onpointermove - setter onpointerout - setter onpointerover - setter onpointerrawupdate - setter onpointerup - setter onpopstate - setter onportalactivate - setter onprogress - setter onratechange - setter onrejectionhandled - setter onrendersubtreeactivation - setter onreset - setter onresize - setter onscroll - setter onscrollend - setter onsearch - setter onseeked - setter onseeking - setter onselect - setter onselectionchange - setter onselectstart - setter onstalled - setter onstorage - setter onsubmit - setter onsuspend - setter ontimeupdate - setter ontoggle - setter ontouchcancel - setter ontouchend - setter ontouchmove - setter ontouchstart - setter ontransitionend - setter onunhandledrejection - setter onunload - setter onvolumechange - setter onwaiting - setter onwebkitanimationend - setter onwebkitanimationiteration - setter onwebkitanimationstart - setter onwebkittransitionend - setter onwheel - setter origin - setter outerHeight - setter outerWidth - setter pageXOffset - setter pageYOffset - setter performance - setter personalbar - setter scheduler - setter screen - setter screenLeft - setter screenTop - setter screenX - setter screenY - setter scrollX - setter scrollY - setter scrollbars - setter status - setter statusbar - setter toolbar - setter visualViewport -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 0056109..25d9623 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png index e1f4302..6c81cce2 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index f3813770..69e1d36 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png index 7e22a7c4..53dd09c 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png index b6cb3a0..5e2a7b472 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png index 61e78cff..4cd4a90 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png index 833fcf1..6a0804e 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index 155c9d34..d0ab457 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png index 6afd9449..2fac4ca 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png index f9529d3..a393957 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png index 17f8796..dfe7c6c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 72c9511..d86a0c03 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png index d09fd88..fbf152f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png index ee758da..daa4ab7 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png index bb7c202..e189651 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png index 79a65c30d..97b7b2e 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png index 17f8796..dfe7c6c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index f8490f3..33cde42 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 12f31a4f..1d815442 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index f8ed12ed..452ae4b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png index 56a7188..57f8e7c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 14dae875..04f7c84 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png index fbc5354..878fbf3f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index 190f927..8d1e798a 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png index f492021..07cc94fb 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png index fa2e4979..9f5f148 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png index f5f4f51..3ed5b30 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png index 149271a..6141d554 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png index 6c3a211e..0762f76 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png index c58408a0..c34c03da 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png index 37db129..7a380f0d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png index 620b45a3..aa5720c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png index 5363b4d8..4c2d734a 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index 08d74bf..e6209d2 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png index ab52c9e..23097ab 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png index 8163cd79..5979919a 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png index 16f1470..e3bd113 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 9179e31..41a93c6d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png index 7f3ff8a..c503e2e 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png index cb4e6df..3c92b16 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png index aff4296..1586c37 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png index 5902ada0..f14ccb3 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png index 16f1470..e3bd113 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 7244aaf..bd5249b6d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 797e4b9..9772416 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 722e61c..21ab713 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png index ef75c622..85ab8890 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index bf9f53d2..30a84bf 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png index a8ed0908f..1aefab9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index b31ee51..0a39750 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png index c10ea84..32ee326 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png index 4b51ad01..a765e087 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png index e60ea62e..81a445c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png index 8e7f165b..1bcc044 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png index 63fc1dd8..08b68fc 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png index 3b453f6..917caa9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png index eb6ef7a..9b31142 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png index be6da2bf..a709c9d6 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png index fdcee64..6b33b56 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index a29b01bb..2147d33 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png index a620e53..784ddc3b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png index b55e288..b1600612 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png index 3700a096..0506476 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png index d0632b6..4a8d4dd 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 7725557..e9aa6f7 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png index 7ede342..9398c57 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png index 9c0fb386..0545139 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png index 054c6d04..dceaeab 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png index 722dda7..009a6dda 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png index d0632b6..4a8d4dd 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 7b10a8bd..ffc336a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png index 103fc646..d76ad62 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index bc61f1c..e11ba70eb 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 79ae029..4aa3fe5 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png index 656859d..90f019e 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 0108c0d..44f123d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png index 0bc3ff1..c7e9fc6 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png index 513826a7..472b7cbb 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png index 7d3cd3b..2777e5e 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png index 782ffd67..3a771b5 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png index 513826a7..472b7cbb 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png index 5afd3ef..d7224dd 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png index 7a25036..d4c7f47 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png index c2e5b5a..8dc58ec 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png index 9376492..8380ffd7 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png index 7d69248..236fb85 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png index 3053c524..4d7a46a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png index 2dbe819c..b2b9877 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png index 701399db..2266fbee 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png index 8c38887..1331ff29 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png index 7b30bdb..8b06bcf 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png index b3072285..2bf6e04b 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png index b3072285..2bf6e04b 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png index 0e60d0e6a..307468f7 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png index 4789f2a..f3dd485 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png index 7fbc4d3..130d9bc 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png index 2f3017d5..896918f 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png index 7263ab6..cd8e63ea 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png index 0faa811..6acfe9c3 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png index 16d1491..b4d50022 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png index 91efffd..1ae83c7 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png index e9f0823..9ea95f9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index 31807e2c..a49b64b4 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png index 25d5c55..891f91c 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png index da61a9f..7ab112ee 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png index 9ebf8ef..8a8e4d8d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png index b162677..ca458d99 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png index ddd8cb8..b3dc43a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png index 651a881..ec4e4562 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png index de5474be..d6c995e1 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png index 94338d0..6ab2c36 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png index ea5f1880..54c5c6b 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index 09953e9..b742421 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png index 5785258..79ae69fd 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png index b6f9cf6..a83cf8d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 4fa11a7..caa729f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png index 39becea09..53e7683 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png index 29f21e8..6dfaa5a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index af40c2e..e6a8fe2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png index 4b19cc8..589c8a3 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png index 16a44f4e..69d0c5d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png index 44cd61d..923974e 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png index dcc76b4..7323fef 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png index 29f21e8..6dfaa5a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 33d2336..e52d347 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png index 2727347ca..d3c96b03 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index c85963a..d1112112 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index fbaeb66..e2f2ee7 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png index f0391c5a..d05f206 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 51d0b5e6..834a396 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png index 308b16b8..19adc10 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png index bb943ed..e96b861 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png index 0393f9d..92f8ebe 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png index 090a8c6..6776ef2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png index bb943ed..e96b861 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png index 2a681ea..f0644fe 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png index f78fec6..3f4655f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png index 599c090..4dfe404 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png index e587ded..5e43cb4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png index 8af1519d..9dbfbbd 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png index b2792dd..2a47431 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png index 0afe6028..6bd37a8c 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png index a453c44..5e07307 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png index 77a9a66..1e6b80ff 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png index 337eb82..85ffe05 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png index d7a19a4..c959607d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png index d7a19a4..c959607d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png index 98b5324..758ce17 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png index ff4b7b44..dbf011f4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png index 500ab54f..47407a4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png index c3305767..6b94fb1 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png index cbc0181..b985cc1 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png index 82ae927..87be1f6 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png index 77f76f7..f989b7a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png index 06e0ff9..edbf519b 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png index 3515be60..c8f313e 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index d42bee8..769a96b 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png index 95c1098..631cc0c 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png index f239e25..fa584477 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png index 766e46da..e08dfec 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png index 8003c168..e6b9354 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png index eddde61..8e2b79c 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png index 4796ef4..52e0d94 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png index 27727052..561cebcb 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png index 89dfd5b..6a0b344d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png index 8b1fe0c0..3d4112be 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index 00b29fd..21ed4c8 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png index 81a5390..8a2d80fb 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png index 825fcfe1b..282e845 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 87cfe7c..869fd52 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png index 346d7143..9043cdb 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index ed8393c..ef44020 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png index 4f83bfc1..a2c4ab71 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png index 86683ca..a408cbb 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png index a9caba9..08280656 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png index 9e7882a..59cd069 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png index 346d7143..9043cdb 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index ce16da8..0de972a 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 98e9b122..bff1ee3 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 6a92794..48e0cfa 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png index 7c11828..2d08858 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 333e8f6..350e63b 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png index 3cd1bd7..0bae342 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png index 8f0b31aa..f151430 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png index 7218b68..9a75b945 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png index aecaa9c..4051a11 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png index 3933b47..3edf8e8 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png index ec90cb2..b278bd7 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-enter-submission.html b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-enter-submission.html deleted file mode 100644 index b6e958f..0000000 --- a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-enter-submission.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src='../../../resources/testharness.js'></script> -<script src='../../../resources/testharnessreport.js'></script> -<script src='../../../fast/forms/resources/picker-common.js'></script> -</head> -<body> -<input type='color' id='color' value='#80d9ff'> -<script> -'use strict'; - -let t = async_test('Color picker: Pressing enter to submit color selection.'); -t.step(() => { - let colorControl = document.getElementById('color'); - openPicker(colorControl, t.step_func(() => { - popupWindow.focus(); - const popupDocument = popupWindow.document; - const colorWell = popupDocument.querySelector('color-well'); - const colorWellRect = colorWell.getBoundingClientRect(); - eventSender.mouseMoveTo(colorWellRect.left, colorWellRect.top); - eventSender.mouseDown(); - eventSender.mouseMoveTo(colorWellRect.left + (colorWellRect.width * 4 / 10), colorWellRect.top + (colorWellRect.height * 6 / 10)); - eventSender.mouseUp(); - eventSender.keyDown('Enter'); - waitUntilClosing(t.step_func_done(() => { - assert_equals(colorControl.value, '#3d5a66', 'Color control value should update after pressing enter.'); - }), popupWindow.eval('ColorPicker').COMMIT_DELAY_MS); - }), t.step_func_done(() => { - assert_true(true, 'Popup did not open.'); - })); -}); -</script> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-escape-cancellation.html b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-escape-cancellation.html index 85543c53..5a4549b5 100644 --- a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-escape-cancellation.html +++ b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-escape-cancellation.html
@@ -6,30 +6,124 @@ <script src='../../../fast/forms/resources/picker-common.js'></script> </head> <body> -<input type='color' id='color' value='#80d9ff'> +<input type='color' id='color1' value='#80d9ff'> +<input type='color' id='color2' value='#3d5a66'> +<input type='color' id='color3' value='#000000'> <script> 'use strict'; -let t = async_test('Color picker: Pressing escape to discard color selection.'); -t.step(() => { - let colorControl = document.getElementById('color'); - openPicker(colorControl, t.step_func(() => { - popupWindow.focus(); - const popupDocument = popupWindow.document; +promise_test(() => { + let colorControl = document.getElementById('color1'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Popup should close after pressing escape with no changes.'); + }); +}, "Color picker: Pressing escape with no changes should close the popup"); + +promise_test(() => { + let colorControl = document.getElementById('color1'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; const colorWell = popupDocument.querySelector('color-well'); const colorWellRect = colorWell.getBoundingClientRect(); eventSender.mouseMoveTo(colorWellRect.left, colorWellRect.top); eventSender.mouseDown(); eventSender.mouseMoveTo(colorWellRect.left + (colorWellRect.width * 4 / 10), colorWellRect.top + (colorWellRect.height * 6 / 10)); eventSender.mouseUp(); + assert_equals(colorControl.value, '#3d5a66', 'Expected color value to change from mouse input.'); eventSender.keyDown('Escape'); - waitUntilClosing(t.step_func_done(() => { - assert_equals(colorControl.value, '#80d9ff', 'Color control value should remain the same after pressing escape.'); - }), popupWindow.eval('ColorPicker').COMMIT_DELAY_MS); - }), t.step_func_done(() => { - assert_true(true, 'Popup did not open.'); - })); -}); + assert_equals(colorControl.value, '#80d9ff', 'Color control value should have reverted back after pressing escape.'); + assert_not_equals(internals.pagePopupWindow, null, 'Popup should still be open after escape that reverted color value.'); + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Popup should close after second escape.'); + }); +}, "Color picker: Pressing escape once discards color selection but keeps popup open, pressing again closes popup"); + +promise_test(() => { + let colorControl = document.getElementById('color1'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const colorWell = popupDocument.querySelector('color-well'); + const rValueContainer = popupDocument.getElementById('rValueContainer'); + const rValueContainerRect = rValueContainer.getBoundingClientRect(); + eventSender.mouseMoveTo(rValueContainerRect.left + 1, rValueContainerRect.top); + eventSender.mouseDown(); + eventSender.mouseUp(); + assert_equals(rValueContainer.value, '128'); + eventSender.keyDown('Delete'); + assert_equals(rValueContainer.value, '28'); + assert_equals(colorControl.value, '#1cd9ff', 'Expected color value to change from manualinput.'); + eventSender.keyDown('Escape'); + assert_equals(colorControl.value, '#80d9ff', 'Color control value should have reverted back after pressing escape.'); + assert_equals(rValueContainer.value, '128'); + assert_not_equals(internals.pagePopupWindow, null, 'Popup should still be open after escape that reverted color value.'); + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Popup should close after second escape.'); + }); +}, "Color picker: Pressing escape once discards manual color selection but keeps popup open, pressing again closes popup"); + +promise_test(() => { + let colorControl = document.getElementById('color2'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const colorWell = popupDocument.querySelector('color-well'); + const colorWellRect = colorWell.getBoundingClientRect(); + eventSender.mouseMoveTo(colorWellRect.left + (colorWellRect.width * 2 / 10), colorWellRect.top + (colorWellRect.height * 3 / 10)); + eventSender.mouseDown(); + eventSender.mouseUp(); + assert_equals(colorControl.value, '#8fa8b3', 'Mouse input should have changed color value.'); + + eventSender.mouseMoveTo(colorWellRect.left + (colorWellRect.width * 4 / 10), colorWellRect.top + (colorWellRect.height * 6 / 10)); + eventSender.mouseDown(); + eventSender.mouseUp(); + assert_equals(colorControl.value, '#3d5a66', 'Mouse input should have changed color back to original value.'); + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Single escape should change popup since its value was switched back the value when opened'); + }); +}, "Color picker: Pressing escape closes popup after value is changed and then set back to original value."); + +promise_test(() => { + let colorControl = document.getElementById('color3'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const hueSlider = popupDocument.querySelector('hue-slider'); + const hueSliderRect = hueSlider.getBoundingClientRect(); + eventSender.mouseMoveTo(hueSliderRect.left, hueSliderRect.top); + eventSender.mouseDown(); + eventSender.mouseMoveTo(hueSliderRect.left + (hueSliderRect.width / 2), hueSliderRect.top); + eventSender.mouseUp(); + assert_equals(colorControl.value, '#000000', 'Hue slider should not have changed value when starting from #000000.'); + + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Single escape should close popup if hue slider but not color value changed'); + }); +}, "Color picker: Hue slider change with no color value change doesn't affect escape behavior"); + +promise_test(() => { + let colorControl = document.getElementById('color3'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const formatToggler = popupDocument.querySelector('format-toggler'); + formatToggler.click(); // first click changes format to HSL + formatToggler.click(); // second click changes format to Hex + + eventSender.keyDown('Escape'); + assert_equals(internals.pagePopupWindow, null, 'Single escape should close popup if manual color entry format but not color value changed'); + }); +}, "Color picker: Format changes with no color value change don't affect escape behavior"); + </script> </body> </html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-events.html b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-events.html new file mode 100644 index 0000000..8209532 --- /dev/null +++ b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-events.html
@@ -0,0 +1,103 @@ +<!DOCTYPE html> +<html> +<head> +<script src='../../../resources/testharness.js'></script> +<script src='../../../resources/testharnessreport.js'></script> +<script src='../../../fast/forms/resources/picker-common.js'></script> +</head> +<body> +<input type='color' id='color1' value='#000000' oninput='inputEventCount++;' onchange='changeEventCount++;'> +<script> +'use strict'; + +var inputEventCount = 0; +var changeEventCount = 0; + +promise_test(() => { + let colorControl = document.getElementById('color1'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + eventSender.keyDown('Enter'); + assert_equals(inputEventCount, 0, 'No input event should have fired if color value was not changed.'); + return new Promise((resolve) => { + window.setTimeout(() => { + assert_equals(changeEventCount, 0, 'No change event should have fired if color value was not changed.'); + resolve(); + }, 0) + }); + }); +}, "Color picker: Opening and closing popup with no changes should not fire input/change events"); + +promise_test(() => { + inputEventCount = 0; + changeEventCount = 0; + let colorControl = document.getElementById('color1'); + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const rValueContainer = popupDocument.getElementById('rValueContainer'); + rValueContainer.focus(); + + assert_equals(rValueContainer.value, '0'); + eventSender.keyDown('1'); + assert_equals(rValueContainer.value, '01'); + assert_equals(inputEventCount, 1, 'Input event should have fired after color value change.'); + assert_equals(changeEventCount, 0, 'No change event should have fired before popup is closed.'); + + eventSender.keyDown('2'); + assert_equals(rValueContainer.value, '012'); + assert_equals(inputEventCount, 2, 'Additional input event should have fired after additional color value change.'); + assert_equals(changeEventCount, 0, 'No change event should have fired before popup is closed.'); + + eventSender.keyDown('Enter'); + assert_equals(internals.pagePopupWindow, null, "Popup should have closed from Enter key"); + assert_equals(inputEventCount, 2, 'No extra input event should fire when closing popup.'); + assert_equals(changeEventCount, 0, 'Change event is fired asynchronously after closing popup.'); + return new Promise((resolve) => { + window.setTimeout(() => { + assert_equals(changeEventCount, 1, 'Change event should have fired (once) asynchronously after closing popup.'); + resolve(); + }, 0) + }); + }); +}, "Color picker: Test firing change and input events"); + +promise_test(() => { + inputEventCount = 0; + changeEventCount = 0; + let colorControl = document.getElementById('color1'); + colorControl.value = '#000000'; + return openPickerWithPromise(colorControl) + .then(() => { + internals.pagePopupWindow.focus(); + const popupDocument = internals.pagePopupWindow.document; + const rValueContainer = popupDocument.getElementById('rValueContainer'); + rValueContainer.focus(); + + assert_equals(rValueContainer.value, '0'); + eventSender.keyDown('1'); + assert_equals(rValueContainer.value, '01'); + assert_equals(inputEventCount, 1, 'Input event should have fired after color value change.'); + assert_equals(changeEventCount, 0, 'No change event should have fired before popup is closed.'); + + eventSender.keyDown('Escape'); + assert_equals(rValueContainer.value, '0'); + assert_equals(inputEventCount, 2, 'Additional input event should have fired after color value is reset.'); + assert_equals(changeEventCount, 0, 'No change event should have fired before popup is closed.'); + + eventSender.keyDown('Enter'); + assert_equals(internals.pagePopupWindow, null, "Popup should have closed from Enter key"); + assert_equals(inputEventCount, 2, 'No extra input event should fire when closing popup.'); + return new Promise((resolve) => { + window.setTimeout(() => { + assert_equals(changeEventCount, 0, 'Change event should not fire if value when opening popup is restored.'); + resolve(); + }, 0) + }); + }); +}, "Color picker: Test that change is not fired if original value is restored"); +</script> +</body> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-tab-navigation-expected.txt b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-tab-navigation-expected.txt index 4fe22dc..ebad46c 100644 --- a/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-tab-navigation-expected.txt +++ b/third_party/blink/web_tests/virtual/controls-refresh/color/color-picker-tab-navigation-expected.txt
@@ -5,11 +5,7 @@ GVALUECONTAINER BVALUECONTAINER FORMAT-TOGGLER -SUBMISSION-BUTTON -SUBMISSION-BUTTON FORMAT-TOGGLER clicked. Active color format changed. -SUBMISSION-BUTTON -SUBMISSION-BUTTON COLOR-SELECTION-RING COLOR-SELECTION-RING HVALUECONTAINER @@ -17,8 +13,6 @@ LVALUECONTAINER FORMAT-TOGGLER FORMAT-TOGGLER clicked. Active color format changed. -SUBMISSION-BUTTON -SUBMISSION-BUTTON COLOR-SELECTION-RING COLOR-SELECTION-RING HEXVALUECONTAINER
diff --git a/third_party/sqlite/amalgamation/shell/shell.c b/third_party/sqlite/amalgamation/shell/shell.c index a7275a2..f3998bd 100644 --- a/third_party/sqlite/amalgamation/shell/shell.c +++ b/third_party/sqlite/amalgamation/shell/shell.c
@@ -5827,6 +5827,7 @@ if( rc==SQLITE_OK ){ zPath = (const char*)sqlite3_value_text(apVal[2]); + if( zPath==0 ) zPath = ""; nPath = (int)strlen(zPath); mTime = zipfileGetTime(apVal[4]); }
diff --git a/third_party/sqlite/amalgamation/sqlite3.c b/third_party/sqlite/amalgamation/sqlite3.c index 46b690dd..359c15e 100644 --- a/third_party/sqlite/amalgamation/sqlite3.c +++ b/third_party/sqlite/amalgamation/sqlite3.c
@@ -19114,6 +19114,7 @@ SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*); SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *); SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*); +SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char*); SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr*); SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); @@ -99331,18 +99332,33 @@ } /* +** Check the input string to see if it is "true" or "false" (in any case). +** +** If the string is.... Return +** "true" EP_IsTrue +** "false" EP_IsFalse +** anything else 0 +*/ +SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char *zIn){ + if( sqlite3StrICmp(zIn, "true")==0 ) return EP_IsTrue; + if( sqlite3StrICmp(zIn, "false")==0 ) return EP_IsFalse; + return 0; +} + + +/* ** If the input expression is an ID with the name "true" or "false" ** then convert it into an TK_TRUEFALSE term. Return non-zero if ** the conversion happened, and zero if the expression is unaltered. */ SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){ + u32 v; assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); if( !ExprHasProperty(pExpr, EP_Quoted) - && (sqlite3StrICmp(pExpr->u.zToken, "true")==0 - || sqlite3StrICmp(pExpr->u.zToken, "false")==0) + && (v = sqlite3IsTrueOrFalse(pExpr->u.zToken))!=0 ){ pExpr->op = TK_TRUEFALSE; - ExprSetProperty(pExpr, pExpr->u.zToken[4]==0 ? EP_IsTrue : EP_IsFalse); + ExprSetProperty(pExpr, v); return 1; } return 0; @@ -127627,7 +127643,7 @@ zName = pEList->a[i].zSpan; } } - if( zName ){ + if( zName && !sqlite3IsTrueOrFalse(zName) ){ zName = sqlite3DbStrDup(db, zName); }else{ zName = sqlite3MPrintf(db,"column%d",i+1); @@ -147617,9 +147633,11 @@ int nInit = pList ? pList->nExpr : 0; for(i=0; i<pAppend->nExpr; i++){ Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); + assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); if( bIntToNull && pDup && pDup->op==TK_INTEGER ){ pDup->op = TK_NULL; pDup->flags &= ~(EP_IntValue|EP_IsTrue|EP_IsFalse); + pDup->u.zToken = 0; } pList = sqlite3ExprListAppend(pParse, pList, pDup); if( pList ) pList->a[nInit+i].sortFlags = pAppend->a[i].sortFlags; @@ -172008,7 +172026,7 @@ ** returns zero rows. */ /* 28 */ "SELECT level, count(*) AS cnt FROM %Q.'%q_segdir' " " GROUP BY level HAVING cnt>=?" - " ORDER BY (level %% 1024) ASC LIMIT 1", + " ORDER BY (level %% 1024) ASC, 2 DESC LIMIT 1", /* Estimate the upper limit on the number of leaf nodes in a new segment ** created by merging the oldest :2 segments from absolute level :1. See @@ -176598,8 +176616,14 @@ rc = fts3IncrmergeHintPop(&hint, &iHintAbsLevel, &nHintSeg); if( nSeg<0 || (iAbsLevel % nMod) >= (iHintAbsLevel % nMod) ){ + /* Based on the scan in the block above, it is known that there + ** are no levels with a relative level smaller than that of + ** iAbsLevel with more than nSeg segments, or if nSeg is -1, + ** no levels with more than nMin segments. Use this to limit the + ** value of nHintSeg to avoid a large memory allocation in case the + ** merge-hint is corrupt*/ iAbsLevel = iHintAbsLevel; - nSeg = nHintSeg; + nSeg = MIN(MAX(nMin,nSeg), nHintSeg); bUseHint = 1; bDirtyHint = 1; }else{ @@ -176612,7 +176636,7 @@ /* If nSeg is less that zero, then there is no level with at least ** nMin segments and no hint in the %_stat table. No work to do. ** Exit early in this case. */ - if( nSeg<0 ) break; + if( nSeg<=0 ) break; /* Open a cursor to iterate through the contents of the oldest nSeg ** indexes of absolute level iAbsLevel. If this cursor is opened using @@ -177990,7 +178014,7 @@ /* Set the *pmSeen output variable. */ for(i=0; i<nList; i++){ if( sIter.aPhrase[i].pHead ){ - *pmSeen |= (u64)1 << i; + *pmSeen |= (u64)1 << (i%64); } } @@ -224696,7 +224720,7 @@ #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ /************** End of stmt.c ************************************************/ -#if __LINE__!=224699 +#if __LINE__!=224723 #undef SQLITE_SOURCE_ID #define SQLITE_SOURCE_ID "2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3dfalt2" #endif
diff --git a/third_party/sqlite/patched/ext/fts3/fts3_snippet.c b/third_party/sqlite/patched/ext/fts3/fts3_snippet.c index dda71c3..6eae82d 100644 --- a/third_party/sqlite/patched/ext/fts3/fts3_snippet.c +++ b/third_party/sqlite/patched/ext/fts3/fts3_snippet.c
@@ -560,7 +560,7 @@ /* Set the *pmSeen output variable. */ for(i=0; i<nList; i++){ if( sIter.aPhrase[i].pHead ){ - *pmSeen |= (u64)1 << i; + *pmSeen |= (u64)1 << (i%64); } }
diff --git a/third_party/sqlite/patched/ext/fts3/fts3_write.c b/third_party/sqlite/patched/ext/fts3/fts3_write.c index 8b6b7299..f30bf34 100644 --- a/third_party/sqlite/patched/ext/fts3/fts3_write.c +++ b/third_party/sqlite/patched/ext/fts3/fts3_write.c
@@ -335,7 +335,7 @@ ** returns zero rows. */ /* 28 */ "SELECT level, count(*) AS cnt FROM %Q.'%q_segdir' " " GROUP BY level HAVING cnt>=?" - " ORDER BY (level %% 1024) ASC LIMIT 1", + " ORDER BY (level %% 1024) ASC, 2 DESC LIMIT 1", /* Estimate the upper limit on the number of leaf nodes in a new segment ** created by merging the oldest :2 segments from absolute level :1. See @@ -4925,8 +4925,14 @@ rc = fts3IncrmergeHintPop(&hint, &iHintAbsLevel, &nHintSeg); if( nSeg<0 || (iAbsLevel % nMod) >= (iHintAbsLevel % nMod) ){ + /* Based on the scan in the block above, it is known that there + ** are no levels with a relative level smaller than that of + ** iAbsLevel with more than nSeg segments, or if nSeg is -1, + ** no levels with more than nMin segments. Use this to limit the + ** value of nHintSeg to avoid a large memory allocation in case the + ** merge-hint is corrupt*/ iAbsLevel = iHintAbsLevel; - nSeg = nHintSeg; + nSeg = MIN(MAX(nMin,nSeg), nHintSeg); bUseHint = 1; bDirtyHint = 1; }else{ @@ -4939,7 +4945,7 @@ /* If nSeg is less that zero, then there is no level with at least ** nMin segments and no hint in the %_stat table. No work to do. ** Exit early in this case. */ - if( nSeg<0 ) break; + if( nSeg<=0 ) break; /* Open a cursor to iterate through the contents of the oldest nSeg ** indexes of absolute level iAbsLevel. If this cursor is opened using
diff --git a/third_party/sqlite/patched/ext/misc/zipfile.c b/third_party/sqlite/patched/ext/misc/zipfile.c index 5a88389..1dc47a7 100644 --- a/third_party/sqlite/patched/ext/misc/zipfile.c +++ b/third_party/sqlite/patched/ext/misc/zipfile.c
@@ -1618,6 +1618,7 @@ if( rc==SQLITE_OK ){ zPath = (const char*)sqlite3_value_text(apVal[2]); + if( zPath==0 ) zPath = ""; nPath = (int)strlen(zPath); mTime = zipfileGetTime(apVal[4]); }
diff --git a/third_party/sqlite/patched/src/expr.c b/third_party/sqlite/patched/src/expr.c index e8b1f31..760978c 100644 --- a/third_party/sqlite/patched/src/expr.c +++ b/third_party/sqlite/patched/src/expr.c
@@ -1815,18 +1815,33 @@ } /* +** Check the input string to see if it is "true" or "false" (in any case). +** +** If the string is.... Return +** "true" EP_IsTrue +** "false" EP_IsFalse +** anything else 0 +*/ +u32 sqlite3IsTrueOrFalse(const char *zIn){ + if( sqlite3StrICmp(zIn, "true")==0 ) return EP_IsTrue; + if( sqlite3StrICmp(zIn, "false")==0 ) return EP_IsFalse; + return 0; +} + + +/* ** If the input expression is an ID with the name "true" or "false" ** then convert it into an TK_TRUEFALSE term. Return non-zero if ** the conversion happened, and zero if the expression is unaltered. */ int sqlite3ExprIdToTrueFalse(Expr *pExpr){ + u32 v; assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); if( !ExprHasProperty(pExpr, EP_Quoted) - && (sqlite3StrICmp(pExpr->u.zToken, "true")==0 - || sqlite3StrICmp(pExpr->u.zToken, "false")==0) + && (v = sqlite3IsTrueOrFalse(pExpr->u.zToken))!=0 ){ pExpr->op = TK_TRUEFALSE; - ExprSetProperty(pExpr, pExpr->u.zToken[4]==0 ? EP_IsTrue : EP_IsFalse); + ExprSetProperty(pExpr, v); return 1; } return 0;
diff --git a/third_party/sqlite/patched/src/select.c b/third_party/sqlite/patched/src/select.c index ba70a2b..be705c11 100644 --- a/third_party/sqlite/patched/src/select.c +++ b/third_party/sqlite/patched/src/select.c
@@ -1980,7 +1980,7 @@ zName = pEList->a[i].zSpan; } } - if( zName ){ + if( zName && !sqlite3IsTrueOrFalse(zName) ){ zName = sqlite3DbStrDup(db, zName); }else{ zName = sqlite3MPrintf(db,"column%d",i+1);
diff --git a/third_party/sqlite/patched/src/sqliteInt.h b/third_party/sqlite/patched/src/sqliteInt.h index 2eb9ff55..970ef81 100644 --- a/third_party/sqlite/patched/src/sqliteInt.h +++ b/third_party/sqlite/patched/src/sqliteInt.h
@@ -4093,6 +4093,7 @@ void sqlite3Savepoint(Parse*, int, Token*); void sqlite3CloseSavepoints(sqlite3 *); void sqlite3LeaveMutexAndCloseZombie(sqlite3*); +u32 sqlite3IsTrueOrFalse(const char*); int sqlite3ExprIdToTrueFalse(Expr*); int sqlite3ExprTruthValue(const Expr*); int sqlite3ExprIsConstant(Expr*);
diff --git a/third_party/sqlite/patched/src/window.c b/third_party/sqlite/patched/src/window.c index c251cd01..2d79ffe 100644 --- a/third_party/sqlite/patched/src/window.c +++ b/third_party/sqlite/patched/src/window.c
@@ -883,9 +883,11 @@ int nInit = pList ? pList->nExpr : 0; for(i=0; i<pAppend->nExpr; i++){ Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); + assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); if( bIntToNull && pDup && pDup->op==TK_INTEGER ){ pDup->op = TK_NULL; pDup->flags &= ~(EP_IntValue|EP_IsTrue|EP_IsFalse); + pDup->u.zToken = 0; } pList = sqlite3ExprListAppend(pParse, pList, pDup); if( pList ) pList->a[nInit+i].sortFlags = pAppend->a[i].sortFlags;
diff --git a/third_party/sqlite/patched/test/fts3corrupt4.test b/third_party/sqlite/patched/test/fts3corrupt4.test index 45dd52f..ed670c72 100644 --- a/third_party/sqlite/patched/test/fts3corrupt4.test +++ b/third_party/sqlite/patched/test/fts3corrupt4.test
@@ -5589,4 +5589,13 @@ INSERT INTO f(f) VALUES ('integrity-check'); } {1 {database disk image is malformed}} +reset_db +do_catchsql_test 36.0 { + CREATE VIRTUAL TABLE f USING fts3(a,tokenize=porter); + CREATE TABLE 'f_stat'(id INTEGER PRIMARY KEY, value BLOB); + INSERT INTO f VALUES (1); + INSERT INTO f_stat VALUES (1,x'00000000000101010119013d00ffff0400fa83717b71a69297979701f63d010101010101010101010101190000000000000000fa83717b71a601f63d01010101010101010101010119013d00ffffff0400fa83717b71a69297979701f63d010101010101010101010101190000000000000000fa83717b71a69201f63d010101f63d01010101010101010101010119013d00ffffff0400fa83717b71a6929797010101010101010101010119013d00ffff01f63d01010101010101010101010119013d00ffffff0400fa83717b71a69297979701f63d00fa03ffffffa69297979701f63d010101000000000101010101197e9797976567656565ffa63535354e'); + INSERT INTO f(f) VALUES ('merge=53,216'); +} {0 {}} + finish_test
diff --git a/third_party/sqlite/patched/test/fts3snippet.test b/third_party/sqlite/patched/test/fts3snippet.test index ce56512..9ee37dc 100644 --- a/third_party/sqlite/patched/test/fts3snippet.test +++ b/third_party/sqlite/patched/test/fts3snippet.test
@@ -587,5 +587,18 @@ {[a70] [a71] [a72]} } +#------------------------------------------------------------------------- +# Request a snippet from a query with more than 64 phrases. +# +reset_db +do_execsql_test 6.0 { + CREATE VIRTUAL TABLE f USING fts3(b); + INSERT INTO f VALUES ( x'746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218'); +} + +do_execsql_test 6.1 { + SELECT length(snippet(f))>0 FROM f WHERE b MATCH x'1065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a010f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c2a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e0f42'; +} {1} + set sqlite_fts3_enable_parentheses 0 finish_test
diff --git a/third_party/sqlite/patched/test/with1.test b/third_party/sqlite/patched/test/with1.test index 4fb074b2c..e5787db 100644 --- a/third_party/sqlite/patched/test/with1.test +++ b/third_party/sqlite/patched/test/with1.test
@@ -1140,4 +1140,28 @@ 3 1 1 3 } +# 2020-01-02 chromium ticket 1033461 +# Do not allow the generated name of a CTE be "true" or "false" as +# such a label might be later confused for the boolean literals of +# the same name, causing inconsistencies in the abstract syntax +# tree. This problem first arose in version 3.23.0 when SQLite +# began recognizing "true" and "false" as boolean literals, but also +# had to continue to recognize "true" and "false" as identifiers for +# backwards compatibility. +# +reset_db +do_execsql_test 25.1 { + CREATE TABLE dual(dummy); + INSERT INTO dual(dummy) VALUES('X'); + WITH cte1 AS ( + SELECT TRUE, ( + WITH cte2 AS (SELECT avg(DISTINCT TRUE) FROM dual) + SELECT 2571 FROM cte2 + ) AS subquery1 + FROM dual + GROUP BY 1 + ) + SELECT (SELECT 1324 FROM cte1) FROM cte1; +} {1324} + finish_test
diff --git a/third_party/sqlite/patched/test/zipfile.test b/third_party/sqlite/patched/test/zipfile.test index 25dc5d64..f5c503d 100644 --- a/third_party/sqlite/patched/test/zipfile.test +++ b/third_party/sqlite/patched/test/zipfile.test
@@ -795,4 +795,17 @@ } {. ./x1.txt ./x2.txt} } +# 2019-12-18 Yongheng and Rui fuzzer +# +do_execsql_test 13.10 { + DROP TABLE IF EXISTS t0; + DROP TABLE IF EXISTS t1; + CREATE TABLE t0(a,b,c,d,e,f,g); + REPLACE INTO t0(c,b,f) VALUES(10,10,10); + CREATE VIRTUAL TABLE t1 USING zipfile('h.zip'); + REPLACE INTO t1 SELECT * FROM t0; + SELECT quote(name),quote(mode),quote(mtime),quote(sz),quote(rawdata), + quote(data),quote(method) FROM t1; +} {'' 10 10 2 X'3130' X'3130' 0} + finish_test
diff --git a/third_party/sqlite/patches/0001-Don-t-allow-shadow-tables-to-be-dropped-in-defensive.patch b/third_party/sqlite/patches/0001-Don-t-allow-shadow-tables-to-be-dropped-in-defensive.patch index e479379..0e81cdf 100644 --- a/third_party/sqlite/patches/0001-Don-t-allow-shadow-tables-to-be-dropped-in-defensive.patch +++ b/third_party/sqlite/patches/0001-Don-t-allow-shadow-tables-to-be-dropped-in-defensive.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 14:09:07 -0800 -Subject: [PATCH 01/17] Don't allow shadow tables to be dropped in defensive +Subject: [PATCH 01/22] Don't allow shadow tables to be dropped in defensive mode. Backports https://www.sqlite.org/src/info/70390bbca49e7066
diff --git a/third_party/sqlite/patches/0002-Improve-shadow-table-corruption-detection-in-fts3.patch b/third_party/sqlite/patches/0002-Improve-shadow-table-corruption-detection-in-fts3.patch index 2294109..eac985c 100644 --- a/third_party/sqlite/patches/0002-Improve-shadow-table-corruption-detection-in-fts3.patch +++ b/third_party/sqlite/patches/0002-Improve-shadow-table-corruption-detection-in-fts3.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 14:32:48 -0800 -Subject: [PATCH 02/17] Improve shadow table corruption detection in fts3 +Subject: [PATCH 02/22] Improve shadow table corruption detection in fts3 Backports https://www.sqlite.org/src/info/04b2873be5aedeb1
diff --git a/third_party/sqlite/patches/0003-Shadow-Table-Corruption-Detection-improvements-in-ft.patch b/third_party/sqlite/patches/0003-Shadow-Table-Corruption-Detection-improvements-in-ft.patch index 0f27608..0982e1d 100644 --- a/third_party/sqlite/patches/0003-Shadow-Table-Corruption-Detection-improvements-in-ft.patch +++ b/third_party/sqlite/patches/0003-Shadow-Table-Corruption-Detection-improvements-in-ft.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 15:04:03 -0800 -Subject: [PATCH 03/17] Shadow Table Corruption Detection improvements in fts3 +Subject: [PATCH 03/22] Shadow Table Corruption Detection improvements in fts3 Backports https://www.sqlite.org/src/info/51525f9c3235967b
diff --git a/third_party/sqlite/patches/0004-Remove-reachable-NEVER-in-fts3.patch b/third_party/sqlite/patches/0004-Remove-reachable-NEVER-in-fts3.patch index f330e17d..bce21ca2a 100644 --- a/third_party/sqlite/patches/0004-Remove-reachable-NEVER-in-fts3.patch +++ b/third_party/sqlite/patches/0004-Remove-reachable-NEVER-in-fts3.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 15:05:43 -0800 -Subject: [PATCH 04/17] Remove reachable NEVER in fts3 +Subject: [PATCH 04/22] Remove reachable NEVER in fts3 Backports https://www.sqlite.org/src/info/8bd75bf636f72f32
diff --git a/third_party/sqlite/patches/0005-Better-corruption-detection-in-fts3.patch b/third_party/sqlite/patches/0005-Better-corruption-detection-in-fts3.patch index 6e1bd70..afe1a4c 100644 --- a/third_party/sqlite/patches/0005-Better-corruption-detection-in-fts3.patch +++ b/third_party/sqlite/patches/0005-Better-corruption-detection-in-fts3.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 15:17:18 -0800 -Subject: [PATCH 05/17] Better % corruption detection in fts3. +Subject: [PATCH 05/22] Better % corruption detection in fts3. Backports https://www.sqlite.org/src/info/1e449687881f4d38
diff --git a/third_party/sqlite/patches/0006-Detect-Prevent-infinite-recursion.patch b/third_party/sqlite/patches/0006-Detect-Prevent-infinite-recursion.patch index c54eb99..5f78c913 100644 --- a/third_party/sqlite/patches/0006-Detect-Prevent-infinite-recursion.patch +++ b/third_party/sqlite/patches/0006-Detect-Prevent-infinite-recursion.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 15:19:40 -0800 -Subject: [PATCH 06/17] Detect/Prevent infinite recursion +Subject: [PATCH 06/22] Detect/Prevent infinite recursion Backports https://www.sqlite.org/src/info/dfcf081d842629a0
diff --git a/third_party/sqlite/patches/0007-Improve-corruption-detection-in-fts4.patch b/third_party/sqlite/patches/0007-Improve-corruption-detection-in-fts4.patch index 846d1d5..5f9cc00 100644 --- a/third_party/sqlite/patches/0007-Improve-corruption-detection-in-fts4.patch +++ b/third_party/sqlite/patches/0007-Improve-corruption-detection-in-fts4.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 19 Nov 2019 15:34:00 -0800 -Subject: [PATCH 07/17] Improve corruption detection in fts4 +Subject: [PATCH 07/22] Improve corruption detection in fts4 Backports https://www.sqlite.org/src/info/10f8a3b718e0f47b
diff --git a/third_party/sqlite/patches/0008-Further-improve-corruption-detection-in-fts3.patch b/third_party/sqlite/patches/0008-Further-improve-corruption-detection-in-fts3.patch index 191d1b7..3789924 100644 --- a/third_party/sqlite/patches/0008-Further-improve-corruption-detection-in-fts3.patch +++ b/third_party/sqlite/patches/0008-Further-improve-corruption-detection-in-fts3.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Wed, 20 Nov 2019 10:58:51 -0800 -Subject: [PATCH 08/17] Further improve corruption detection in fts3 +Subject: [PATCH 08/22] Further improve corruption detection in fts3 Backports https://sqlite.org/src/info/a0f6d526baecd061 (aka https://sqlite.org/src/info/a0f6d526baecd061a5e2)
diff --git a/third_party/sqlite/patches/0009-Make-sure-WITH-stack-is-disabled-after-error.patch b/third_party/sqlite/patches/0009-Make-sure-WITH-stack-is-disabled-after-error.patch index b2e44f3..4caeaa13 100644 --- a/third_party/sqlite/patches/0009-Make-sure-WITH-stack-is-disabled-after-error.patch +++ b/third_party/sqlite/patches/0009-Make-sure-WITH-stack-is-disabled-after-error.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 3 Dec 2019 13:56:38 -0800 -Subject: [PATCH 09/17] Make sure WITH stack is disabled after error +Subject: [PATCH 09/22] Make sure WITH stack is disabled after error Backports https://sqlite.org/src/info/de6e6d6846d6a41c
diff --git a/third_party/sqlite/patches/0010-Avoid-zero-offset.patch b/third_party/sqlite/patches/0010-Avoid-zero-offset.patch index 51e40d0..5d94488a 100644 --- a/third_party/sqlite/patches/0010-Avoid-zero-offset.patch +++ b/third_party/sqlite/patches/0010-Avoid-zero-offset.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 3 Dec 2019 13:59:19 -0800 -Subject: [PATCH 10/17] Avoid zero offset +Subject: [PATCH 10/22] Avoid zero offset Backports https://www.sqlite.org/src/info/3ce804e99bbef83d
diff --git a/third_party/sqlite/patches/0011-Avoid-zero-offset-of-nullptr.patch b/third_party/sqlite/patches/0011-Avoid-zero-offset-of-nullptr.patch index 3dbb9fa..6b2737cc 100644 --- a/third_party/sqlite/patches/0011-Avoid-zero-offset-of-nullptr.patch +++ b/third_party/sqlite/patches/0011-Avoid-zero-offset-of-nullptr.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Tue, 3 Dec 2019 14:01:40 -0800 -Subject: [PATCH 11/17] Avoid zero offset of nullptr +Subject: [PATCH 11/22] Avoid zero offset of nullptr Backports https://www.sqlite.org/src/info/85d95abec4a596eb
diff --git a/third_party/sqlite/patches/0012-Fix-buffer-overread.patch b/third_party/sqlite/patches/0012-Fix-buffer-overread.patch index 033ebc4..bac4345 100644 --- a/third_party/sqlite/patches/0012-Fix-buffer-overread.patch +++ b/third_party/sqlite/patches/0012-Fix-buffer-overread.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Mon, 16 Dec 2019 11:49:51 -0800 -Subject: [PATCH 12/17] Fix buffer overread +Subject: [PATCH 12/22] Fix buffer overread Backports https://www.sqlite.org/src/info/e01fdbf9f700e1bd
diff --git a/third_party/sqlite/patches/0013-Fix-UB-warning.patch b/third_party/sqlite/patches/0013-Fix-UB-warning.patch index 2e640a3..6073283 100644 --- a/third_party/sqlite/patches/0013-Fix-UB-warning.patch +++ b/third_party/sqlite/patches/0013-Fix-UB-warning.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Mon, 16 Dec 2019 13:45:04 -0800 -Subject: [PATCH 13/17] Fix UB warning +Subject: [PATCH 13/22] Fix UB warning Backports https://sqlite.org/src/info/052fdf5e58b41cca
diff --git a/third_party/sqlite/patches/0014-Avoid-temp-trigger-crash.patch b/third_party/sqlite/patches/0014-Avoid-temp-trigger-crash.patch index aa89003..c13e071 100644 --- a/third_party/sqlite/patches/0014-Avoid-temp-trigger-crash.patch +++ b/third_party/sqlite/patches/0014-Avoid-temp-trigger-crash.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Mon, 16 Dec 2019 13:48:39 -0800 -Subject: [PATCH 14/17] Avoid temp trigger crash +Subject: [PATCH 14/22] Avoid temp trigger crash Backports https://sqlite.org/src/info/c4cb9708d48ead10
diff --git a/third_party/sqlite/patches/0015-Fix-fts3-integer-overflows.patch b/third_party/sqlite/patches/0015-Fix-fts3-integer-overflows.patch index 4556006c..ec72ce0 100644 --- a/third_party/sqlite/patches/0015-Fix-fts3-integer-overflows.patch +++ b/third_party/sqlite/patches/0015-Fix-fts3-integer-overflows.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Mon, 16 Dec 2019 16:01:06 -0800 -Subject: [PATCH 15/17] Fix fts3 integer overflows +Subject: [PATCH 15/22] Fix fts3 integer overflows Backports https://www.sqlite.org/src/info/3b873029ef1903f7
diff --git a/third_party/sqlite/patches/0016-Avoid-infinite-recursion-in-ALTER-TABLE-code.patch b/third_party/sqlite/patches/0016-Avoid-infinite-recursion-in-ALTER-TABLE-code.patch index b5e4084..795ed396 100644 --- a/third_party/sqlite/patches/0016-Avoid-infinite-recursion-in-ALTER-TABLE-code.patch +++ b/third_party/sqlite/patches/0016-Avoid-infinite-recursion-in-ALTER-TABLE-code.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Wed, 18 Dec 2019 16:38:02 -0800 -Subject: [PATCH 16/17] Avoid infinite recursion in ALTER TABLE code +Subject: [PATCH 16/22] Avoid infinite recursion in ALTER TABLE code Backports https://www.sqlite.org/src/info/1d2e53a39b87e364685e21de137655b6eee725e4c6d27fc90865072d7c5892b5
diff --git a/third_party/sqlite/patches/0017-Add-restrictions-on-shadow-table-changes-in-defensiv.patch b/third_party/sqlite/patches/0017-Add-restrictions-on-shadow-table-changes-in-defensiv.patch index 780d341..49b3e5d 100644 --- a/third_party/sqlite/patches/0017-Add-restrictions-on-shadow-table-changes-in-defensiv.patch +++ b/third_party/sqlite/patches/0017-Add-restrictions-on-shadow-table-changes-in-defensiv.patch
@@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Darwin Huang <huangdarwin@chromium.org> Date: Thu, 19 Dec 2019 14:19:06 -0800 -Subject: [PATCH 17/17] Add restrictions on shadow table changes in defensive +Subject: [PATCH 17/22] Add restrictions on shadow table changes in defensive mode Backports https://www.sqlite.org/src/info/bae76a5c40703871
diff --git a/third_party/sqlite/patches/0018-Avoid-ambiguous-true-and-false-return.patch b/third_party/sqlite/patches/0018-Avoid-ambiguous-true-and-false-return.patch new file mode 100644 index 0000000..607d9c5 --- /dev/null +++ b/third_party/sqlite/patches/0018-Avoid-ambiguous-true-and-false-return.patch
@@ -0,0 +1,118 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Darwin Huang <huangdarwin@chromium.org> +Date: Tue, 7 Jan 2020 13:32:12 -0800 +Subject: [PATCH 18/22] Avoid ambiguous true and false return + +Backports https://www.sqlite.org/src/info/ff9492d3ff733c22 + +Bug: 1033461 +--- + third_party/sqlite/patched/src/expr.c | 21 ++++++++++++++++--- + third_party/sqlite/patched/src/select.c | 2 +- + third_party/sqlite/patched/src/sqliteInt.h | 1 + + third_party/sqlite/patched/test/with1.test | 24 ++++++++++++++++++++++ + 4 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/third_party/sqlite/patched/src/expr.c b/third_party/sqlite/patched/src/expr.c +index e8b1f31c42aa..760978c482d3 100644 +--- a/third_party/sqlite/patched/src/expr.c ++++ b/third_party/sqlite/patched/src/expr.c +@@ -1814,19 +1814,34 @@ int sqlite3SelectWalkFail(Walker *pWalker, Select *NotUsed){ + return WRC_Abort; + } + ++/* ++** Check the input string to see if it is "true" or "false" (in any case). ++** ++** If the string is.... Return ++** "true" EP_IsTrue ++** "false" EP_IsFalse ++** anything else 0 ++*/ ++u32 sqlite3IsTrueOrFalse(const char *zIn){ ++ if( sqlite3StrICmp(zIn, "true")==0 ) return EP_IsTrue; ++ if( sqlite3StrICmp(zIn, "false")==0 ) return EP_IsFalse; ++ return 0; ++} ++ ++ + /* + ** If the input expression is an ID with the name "true" or "false" + ** then convert it into an TK_TRUEFALSE term. Return non-zero if + ** the conversion happened, and zero if the expression is unaltered. + */ + int sqlite3ExprIdToTrueFalse(Expr *pExpr){ ++ u32 v; + assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); + if( !ExprHasProperty(pExpr, EP_Quoted) +- && (sqlite3StrICmp(pExpr->u.zToken, "true")==0 +- || sqlite3StrICmp(pExpr->u.zToken, "false")==0) ++ && (v = sqlite3IsTrueOrFalse(pExpr->u.zToken))!=0 + ){ + pExpr->op = TK_TRUEFALSE; +- ExprSetProperty(pExpr, pExpr->u.zToken[4]==0 ? EP_IsTrue : EP_IsFalse); ++ ExprSetProperty(pExpr, v); + return 1; + } + return 0; +diff --git a/third_party/sqlite/patched/src/select.c b/third_party/sqlite/patched/src/select.c +index ba70a2bdec78..be705c11d1b4 100644 +--- a/third_party/sqlite/patched/src/select.c ++++ b/third_party/sqlite/patched/src/select.c +@@ -1980,7 +1980,7 @@ int sqlite3ColumnsFromExprList( + zName = pEList->a[i].zSpan; + } + } +- if( zName ){ ++ if( zName && !sqlite3IsTrueOrFalse(zName) ){ + zName = sqlite3DbStrDup(db, zName); + }else{ + zName = sqlite3MPrintf(db,"column%d",i+1); +diff --git a/third_party/sqlite/patched/src/sqliteInt.h b/third_party/sqlite/patched/src/sqliteInt.h +index 2eb9ff559aac..970ef817f3e1 100644 +--- a/third_party/sqlite/patched/src/sqliteInt.h ++++ b/third_party/sqlite/patched/src/sqliteInt.h +@@ -4093,6 +4093,7 @@ void sqlite3EndTransaction(Parse*,int); + void sqlite3Savepoint(Parse*, int, Token*); + void sqlite3CloseSavepoints(sqlite3 *); + void sqlite3LeaveMutexAndCloseZombie(sqlite3*); ++u32 sqlite3IsTrueOrFalse(const char*); + int sqlite3ExprIdToTrueFalse(Expr*); + int sqlite3ExprTruthValue(const Expr*); + int sqlite3ExprIsConstant(Expr*); +diff --git a/third_party/sqlite/patched/test/with1.test b/third_party/sqlite/patched/test/with1.test +index 4fb074b2cf0a..e5787db704d1 100644 +--- a/third_party/sqlite/patched/test/with1.test ++++ b/third_party/sqlite/patched/test/with1.test +@@ -1140,4 +1140,28 @@ do_execsql_test 24.2 { + 3 1 1 3 + } + ++# 2020-01-02 chromium ticket 1033461 ++# Do not allow the generated name of a CTE be "true" or "false" as ++# such a label might be later confused for the boolean literals of ++# the same name, causing inconsistencies in the abstract syntax ++# tree. This problem first arose in version 3.23.0 when SQLite ++# began recognizing "true" and "false" as boolean literals, but also ++# had to continue to recognize "true" and "false" as identifiers for ++# backwards compatibility. ++# ++reset_db ++do_execsql_test 25.1 { ++ CREATE TABLE dual(dummy); ++ INSERT INTO dual(dummy) VALUES('X'); ++ WITH cte1 AS ( ++ SELECT TRUE, ( ++ WITH cte2 AS (SELECT avg(DISTINCT TRUE) FROM dual) ++ SELECT 2571 FROM cte2 ++ ) AS subquery1 ++ FROM dual ++ GROUP BY 1 ++ ) ++ SELECT (SELECT 1324 FROM cte1) FROM cte1; ++} {1324} ++ + finish_test +-- +2.24.1.735.g03f4e72817-goog +
diff --git a/third_party/sqlite/patches/0019-Fix-fts3-UB-uint64.patch b/third_party/sqlite/patches/0019-Fix-fts3-UB-uint64.patch new file mode 100644 index 0000000..964c7c0 --- /dev/null +++ b/third_party/sqlite/patches/0019-Fix-fts3-UB-uint64.patch
@@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Darwin Huang <huangdarwin@chromium.org> +Date: Tue, 7 Jan 2020 13:34:37 -0800 +Subject: [PATCH 19/22] Fix fts3 UB uint64 + +Backports https://sqlite.org/src/info/e1f12978b53683114ab0 + +Bug: 1037786 +--- + third_party/sqlite/patched/ext/fts3/fts3_snippet.c | 2 +- + third_party/sqlite/patched/test/fts3snippet.test | 13 +++++++++++++ + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/third_party/sqlite/patched/ext/fts3/fts3_snippet.c b/third_party/sqlite/patched/ext/fts3/fts3_snippet.c +index dda71c3985af..6eae82dbc3ff 100644 +--- a/third_party/sqlite/patched/ext/fts3/fts3_snippet.c ++++ b/third_party/sqlite/patched/ext/fts3/fts3_snippet.c +@@ -560,7 +560,7 @@ static int fts3BestSnippet( + /* Set the *pmSeen output variable. */ + for(i=0; i<nList; i++){ + if( sIter.aPhrase[i].pHead ){ +- *pmSeen |= (u64)1 << i; ++ *pmSeen |= (u64)1 << (i%64); + } + } + +diff --git a/third_party/sqlite/patched/test/fts3snippet.test b/third_party/sqlite/patched/test/fts3snippet.test +index ce565127b5a3..9ee37dc6263f 100644 +--- a/third_party/sqlite/patched/test/fts3snippet.test ++++ b/third_party/sqlite/patched/test/fts3snippet.test +@@ -587,5 +587,18 @@ do_execsql_test 5.1 { + {[a70] [a71] [a72]} + } + ++#------------------------------------------------------------------------- ++# Request a snippet from a query with more than 64 phrases. ++# ++reset_db ++do_execsql_test 6.0 { ++ CREATE VIRTUAL TABLE f USING fts3(b); ++ INSERT INTO f VALUES ( x'746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218'); ++} ++ ++do_execsql_test 6.1 { ++ SELECT length(snippet(f))>0 FROM f WHERE b MATCH x'1065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a010f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c2a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e0f42'; ++} {1} ++ + set sqlite_fts3_enable_parentheses 0 + finish_test +-- +2.24.1.735.g03f4e72817-goog +
diff --git a/third_party/sqlite/patches/0020-Avoid-large-memory-alloc-for-corrupt-record.patch b/third_party/sqlite/patches/0020-Avoid-large-memory-alloc-for-corrupt-record.patch new file mode 100644 index 0000000..877411ce --- /dev/null +++ b/third_party/sqlite/patches/0020-Avoid-large-memory-alloc-for-corrupt-record.patch
@@ -0,0 +1,72 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Darwin Huang <huangdarwin@chromium.org> +Date: Tue, 7 Jan 2020 13:38:31 -0800 +Subject: [PATCH 20/22] Avoid large memory alloc for corrupt record + +Backports https://www.sqlite.org/src/info/9add58fe9688d5c1 + +Bug: 1038213 +--- + third_party/sqlite/patched/ext/fts3/fts3_write.c | 12 +++++++++--- + third_party/sqlite/patched/test/fts3corrupt4.test | 9 +++++++++ + 2 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/third_party/sqlite/patched/ext/fts3/fts3_write.c b/third_party/sqlite/patched/ext/fts3/fts3_write.c +index 8b6b729987c3..f30bf343635d 100644 +--- a/third_party/sqlite/patched/ext/fts3/fts3_write.c ++++ b/third_party/sqlite/patched/ext/fts3/fts3_write.c +@@ -335,7 +335,7 @@ static int fts3SqlStmt( + ** returns zero rows. */ + /* 28 */ "SELECT level, count(*) AS cnt FROM %Q.'%q_segdir' " + " GROUP BY level HAVING cnt>=?" +- " ORDER BY (level %% 1024) ASC LIMIT 1", ++ " ORDER BY (level %% 1024) ASC, 2 DESC LIMIT 1", + + /* Estimate the upper limit on the number of leaf nodes in a new segment + ** created by merging the oldest :2 segments from absolute level :1. See +@@ -4925,8 +4925,14 @@ int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){ + + rc = fts3IncrmergeHintPop(&hint, &iHintAbsLevel, &nHintSeg); + if( nSeg<0 || (iAbsLevel % nMod) >= (iHintAbsLevel % nMod) ){ ++ /* Based on the scan in the block above, it is known that there ++ ** are no levels with a relative level smaller than that of ++ ** iAbsLevel with more than nSeg segments, or if nSeg is -1, ++ ** no levels with more than nMin segments. Use this to limit the ++ ** value of nHintSeg to avoid a large memory allocation in case the ++ ** merge-hint is corrupt*/ + iAbsLevel = iHintAbsLevel; +- nSeg = nHintSeg; ++ nSeg = MIN(MAX(nMin,nSeg), nHintSeg); + bUseHint = 1; + bDirtyHint = 1; + }else{ +@@ -4939,7 +4945,7 @@ int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){ + /* If nSeg is less that zero, then there is no level with at least + ** nMin segments and no hint in the %_stat table. No work to do. + ** Exit early in this case. */ +- if( nSeg<0 ) break; ++ if( nSeg<=0 ) break; + + /* Open a cursor to iterate through the contents of the oldest nSeg + ** indexes of absolute level iAbsLevel. If this cursor is opened using +diff --git a/third_party/sqlite/patched/test/fts3corrupt4.test b/third_party/sqlite/patched/test/fts3corrupt4.test +index 45dd52fff29e..ed670c72223c 100644 +--- a/third_party/sqlite/patched/test/fts3corrupt4.test ++++ b/third_party/sqlite/patched/test/fts3corrupt4.test +@@ -5589,4 +5589,13 @@ do_catchsql_test 35.1 { + INSERT INTO f(f) VALUES ('integrity-check'); + } {1 {database disk image is malformed}} + ++reset_db ++do_catchsql_test 36.0 { ++ CREATE VIRTUAL TABLE f USING fts3(a,tokenize=porter); ++ CREATE TABLE 'f_stat'(id INTEGER PRIMARY KEY, value BLOB); ++ INSERT INTO f VALUES (1); ++ INSERT INTO f_stat VALUES (1,x'00000000000101010119013d00ffff0400fa83717b71a69297979701f63d010101010101010101010101190000000000000000fa83717b71a601f63d01010101010101010101010119013d00ffffff0400fa83717b71a69297979701f63d010101010101010101010101190000000000000000fa83717b71a69201f63d010101f63d01010101010101010101010119013d00ffffff0400fa83717b71a6929797010101010101010101010119013d00ffff01f63d01010101010101010101010119013d00ffffff0400fa83717b71a69297979701f63d00fa03ffffffa69297979701f63d010101000000000101010101197e9797976567656565ffa63535354e'); ++ INSERT INTO f(f) VALUES ('merge=53,216'); ++} {0 {}} ++ + finish_test +-- +2.24.1.735.g03f4e72817-goog +
diff --git a/third_party/sqlite/patches/0021-Avoid-invalid-pointer-dereference-in-ORDER-BY.patch b/third_party/sqlite/patches/0021-Avoid-invalid-pointer-dereference-in-ORDER-BY.patch new file mode 100644 index 0000000..5b2f4630 --- /dev/null +++ b/third_party/sqlite/patches/0021-Avoid-invalid-pointer-dereference-in-ORDER-BY.patch
@@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Darwin Huang <huangdarwin@chromium.org> +Date: Tue, 7 Jan 2020 13:42:03 -0800 +Subject: [PATCH 21/22] Avoid invalid pointer dereference in ORDER BY + +Backports https://sqlite.org/src/info/1ca0bd982ab1183bbafce0d260e4dceda5eb766ed2e7793374a88d1ae0bdd2ca + +Bug: 1038863 +--- + third_party/sqlite/patched/src/window.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/third_party/sqlite/patched/src/window.c b/third_party/sqlite/patched/src/window.c +index c251cd01974d..2d79ffe63d6d 100644 +--- a/third_party/sqlite/patched/src/window.c ++++ b/third_party/sqlite/patched/src/window.c +@@ -883,9 +883,11 @@ static ExprList *exprListAppendList( + int nInit = pList ? pList->nExpr : 0; + for(i=0; i<pAppend->nExpr; i++){ + Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); ++ assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); + if( bIntToNull && pDup && pDup->op==TK_INTEGER ){ + pDup->op = TK_NULL; + pDup->flags &= ~(EP_IntValue|EP_IsTrue|EP_IsFalse); ++ pDup->u.zToken = 0; + } + pList = sqlite3ExprListAppend(pParse, pList, pDup); + if( pList ) pList->a[nInit+i].sortFlags = pAppend->a[i].sortFlags; +-- +2.24.1.735.g03f4e72817-goog +
diff --git a/third_party/sqlite/patches/0022-Fix-zipfile-extension-INSERT-with-NULL-pathname.patch b/third_party/sqlite/patches/0022-Fix-zipfile-extension-INSERT-with-NULL-pathname.patch new file mode 100644 index 0000000..a2308deb --- /dev/null +++ b/third_party/sqlite/patches/0022-Fix-zipfile-extension-INSERT-with-NULL-pathname.patch
@@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Darwin Huang <huangdarwin@chromium.org> +Date: Tue, 7 Jan 2020 13:43:48 -0800 +Subject: [PATCH 22/22] Fix zipfile extension INSERT with NULL pathname + +Backports https://sqlite.org/src/info/a80f84b511231204658304226de3e075a55afc2e3f39ac063716f7a57f585c06 + +Bug: 1038863 +--- + third_party/sqlite/patched/ext/misc/zipfile.c | 1 + + third_party/sqlite/patched/test/zipfile.test | 13 +++++++++++++ + 2 files changed, 14 insertions(+) + +diff --git a/third_party/sqlite/patched/ext/misc/zipfile.c b/third_party/sqlite/patched/ext/misc/zipfile.c +index 5a88389bf2da..1dc47a7d9ae0 100644 +--- a/third_party/sqlite/patched/ext/misc/zipfile.c ++++ b/third_party/sqlite/patched/ext/misc/zipfile.c +@@ -1618,6 +1618,7 @@ static int zipfileUpdate( + + if( rc==SQLITE_OK ){ + zPath = (const char*)sqlite3_value_text(apVal[2]); ++ if( zPath==0 ) zPath = ""; + nPath = (int)strlen(zPath); + mTime = zipfileGetTime(apVal[4]); + } +diff --git a/third_party/sqlite/patched/test/zipfile.test b/third_party/sqlite/patched/test/zipfile.test +index 25dc5d6497d1..f5c503d7f156 100644 +--- a/third_party/sqlite/patched/test/zipfile.test ++++ b/third_party/sqlite/patched/test/zipfile.test +@@ -795,4 +795,17 @@ if {$tcl_platform(platform)!="windows"} { + } {. ./x1.txt ./x2.txt} + } + ++# 2019-12-18 Yongheng and Rui fuzzer ++# ++do_execsql_test 13.10 { ++ DROP TABLE IF EXISTS t0; ++ DROP TABLE IF EXISTS t1; ++ CREATE TABLE t0(a,b,c,d,e,f,g); ++ REPLACE INTO t0(c,b,f) VALUES(10,10,10); ++ CREATE VIRTUAL TABLE t1 USING zipfile('h.zip'); ++ REPLACE INTO t1 SELECT * FROM t0; ++ SELECT quote(name),quote(mode),quote(mtime),quote(sz),quote(rawdata), ++ quote(data),quote(method) FROM t1; ++} {'' 10 10 2 X'3130' X'3130' 0} ++ + finish_test +-- +2.24.1.735.g03f4e72817-goog +
diff --git a/third_party/sqlite4java/cipd.yaml b/third_party/sqlite4java/cipd.yaml index 177101d..2172c07 100644 --- a/third_party/sqlite4java/cipd.yaml +++ b/third_party/sqlite4java/cipd.yaml
@@ -13,3 +13,4 @@ - file: lib/mac-x86_64/libsqlite4java.jnilib - file: lib/windows-x86/sqlite4java.dll - file: lib/windows-x86_64/sqlite4java.dll +install_mode: "copy"
diff --git a/tools/binary_size/trybot_commit_size_checker.py b/tools/binary_size/trybot_commit_size_checker.py index 775ae705..73832c23 100755 --- a/tools/binary_size/trybot_commit_size_checker.py +++ b/tools/binary_size/trybot_commit_size_checker.py
@@ -264,14 +264,17 @@ binary_size_listings = [] for delta in size_deltas: - if delta.actual == 0: - continue listing = { 'name': delta.name, 'delta': '{} {}'.format(_FormatSign(delta.actual), delta.units), 'limit': '{} {}'.format(_FormatSign(delta.expected), delta.units), 'allowed': delta.IsAllowable(), } + if delta is resource_sizes_delta: + listing['name'] = 'Android Binary Size', + # The main 'binary size' delta is always shown even if unchanged. + elif delta.actual == 0: + continue binary_size_listings.append(listing) binary_size_extras = [
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 01d96f307..ab981ac3 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -76,7 +76,7 @@ 'Android WebView P Blink-CORS FYI (rel)': 'android_release_bot_minimal_symbols_arm64_webview_google', 'Android WebView P FYI (rel)': 'android_release_bot_minimal_symbols_arm64_webview_google', 'android-marshmallow-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86_resource_whitelisting', - 'android-pie-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86', + 'android-pie-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86_webview_google', 'android-bfcache-debug': 'android_debug_static_bot', }, @@ -678,7 +678,7 @@ 'android-pie-arm64-coverage-rel': 'android_release_trybot_arm64_webview_google_native_coverage', 'android-pie-arm64-rel': 'android_release_trybot_arm64_webview_google', 'android-webview-pie-arm64-fyi-rel': 'android_release_trybot_arm64_webview_google', - 'android-pie-x86-fyi-rel': 'android_release_trybot_x86', + 'android-pie-x86-fyi-rel': 'android_release_trybot_x86_webview_google', 'android-webview-marshmallow-arm64-dbg': 'android_release_trybot_arm64_webview_google', 'android-webview-nougat-arm64-dbg': 'android_release_trybot_arm64_webview_google', 'android-webview-oreo-arm64-dbg': 'android_release_trybot_arm64_webview_google', @@ -1170,16 +1170,16 @@ 'strip_debug_info', 'android_fastbuild', ], - 'android_release_bot_minimal_symbols_x86': [ - 'android', 'release_bot', 'minimal_symbols', 'x86', - 'strip_debug_info', - ], - 'android_release_bot_minimal_symbols_x86_resource_whitelisting': [ 'android', 'release_bot', 'minimal_symbols', 'x86', 'resource_whitelisting', ], + 'android_release_bot_minimal_symbols_x86_webview_google': [ + 'android', 'release_bot', 'minimal_symbols', 'x86', + 'strip_debug_info', 'webview_google', + ], + 'android_release_trybot': [ 'android', 'release_trybot', 'strip_debug_info', ], @@ -1204,14 +1204,14 @@ 'android_no_proguard', ], - 'android_release_trybot_x86': [ - 'android', 'release_trybot', 'strip_debug_info', 'x86', - ], - 'android_release_trybot_x86_resource_whitelisting': [ 'android', 'release_trybot', 'x86', 'resource_whitelisting', ], + 'android_release_trybot_x86_webview_google': [ + 'android', 'release_trybot', 'strip_debug_info', 'x86', 'webview_google', + ], + 'android_webview_google_debug_static_bot': [ 'android', 'debug_static_bot', 'webview_google', ],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 832dad4..3588bc33 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -3262,7 +3262,7 @@ </enum> <enum name="AsyncHitTestReasons"> - <int value="0" label="Not async hit test"/> + <int value="0" label="Synchronous hit test"/> <int value="1" label="Iframe has overlapped region"/> <int value="2" label="Iframe is irregularly clipped"/> <int value="3" label="Iframe is not active"/> @@ -4411,6 +4411,8 @@ <int value="0" label="Not migrated"/> <int value="1" label="Migrated from canonical email"/> <int value="2" label="Migrated from non canonical email"/> + <int value="3" + label="Not migrated (Unexpected primary account id with email format)."/> </enum> <enum name="AutofillPredictionSource">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index ecb16ac..a55aebd 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -695,7 +695,7 @@ </histogram> <histogram name="Accessibility.WinScreenReader2" enum="BooleanEnabled" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- expires-never: usage drives a11y prioritization in browser and content. --> <owner>aleventhal@chromium.org</owner> @@ -2534,14 +2534,14 @@ </histogram> <histogram name="Android.DownloadManager.OpenSource.Video" - enum="AndroidDownloadOpenSource" expires_after="2020-05-03"> + enum="AndroidDownloadOpenSource" expires_after="2020-07-06"> <owner>xingliu@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary>Records how users open video download files on Android.</summary> </histogram> <histogram name="Android.DownloadManager.OtherExtensions.InitialCount" - enum="AndroidDownloadExtensionType" expires_after="M81"> + enum="AndroidDownloadExtensionType" expires_after="2020-07-06"> <owner>twellington@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -2571,7 +2571,7 @@ </histogram> <histogram name="Android.DownloadManager.OtherExtensions.Share" - enum="AndroidDownloadExtensionType" expires_after="M81"> + enum="AndroidDownloadExtensionType" expires_after="2020-07-06"> <owner>twellington@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -2699,7 +2699,7 @@ </histogram> <histogram base="true" name="Android.FeatureModules.AvailabilityStatus" - enum="FeatureModuleAvailabilityStatus" expires_after="2020-05-03"> + enum="FeatureModuleAvailabilityStatus" expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" --> @@ -3004,7 +3004,7 @@ </histogram> <histogram name="Android.Language.WrongLanguageAfterResume" enum="Boolean" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>tiborg@chromium.org</owner> <owner>heamy@chromium.org</owner> <summary> @@ -3777,7 +3777,7 @@ </histogram> <histogram name="Android.SeccompStatus.RendererSandbox" - enum="AndroidSeccompSandboxStatus" expires_after="2020-05-03"> + enum="AndroidSeccompSandboxStatus" expires_after="2020-07-06"> <owner>rsesek@chromium.org</owner> <summary> Reports the status of the seccomp-bpf sandbox in renderer processes. @@ -5186,7 +5186,7 @@ </histogram> <histogram name="Apps.AppList.AnswerCardSearchProvider.SearchAnswerLoadingTime" - units="ms" expires_after="2020-05-03"> + units="ms" expires_after="2020-07-06"> <owner>jennyz@chriomium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5207,7 +5207,7 @@ </histogram> <histogram name="Apps.AppList.AppSearchProvider.QueryTime" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5237,7 +5237,7 @@ </histogram> <histogram name="Apps.AppList.DriveQuickAccessProvider.ApiResults" - units="count" expires_after="2020-05-03"> + units="count" expires_after="2020-07-06"> <owner>tby@chromium.org</owner> <owner>wrong@chromium.org</owner> <owner>jiameng@chromium.org</owner> @@ -5271,7 +5271,7 @@ </histogram> <histogram name="Apps.AppList.DriveQuickAccessProvider.FileError" - enum="DriveFileError" expires_after="2020-05-03"> + enum="DriveFileError" expires_after="2020-07-06"> <owner>tby@chromium.org</owner> <owner>wrong@chromium.org</owner> <owner>jiameng@chromium.org</owner> @@ -5318,7 +5318,7 @@ <histogram name="Apps.AppList.DriveQuickAccessProvider.TimeFromFetchToZeroStateStart" - units="ms" expires_after="2020-05-03"> + units="ms" expires_after="2020-07-06"> <owner>wrong@chromium.org</owner> <owner>tby@chromium.org</owner> <owner>jiameng@chromium.org</owner> @@ -5361,7 +5361,7 @@ </histogram> <histogram name="Apps.AppList.OmniboxProvider.ZeroStateLatency" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jennyz@chriomium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5482,7 +5482,7 @@ </histogram> <histogram name="Apps.AppList.ZeroStateResultsList.FileImpressions" - enum="AppListSearchResult" expires_after="2020-05-03"> + enum="AppListSearchResult" expires_after="2020-07-06"> <owner>wrong@chromium.org</owner> <owner>tby@chromium.org</owner> <owner>jiameng@chromium.org</owner> @@ -5816,7 +5816,7 @@ </histogram> <histogram name="Apps.AppListPlayStoreAppLaunchedIndex" units="indices" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5841,7 +5841,7 @@ </histogram> <histogram name="Apps.AppListRecommendedImpResultCountAfterOpen" units="shows" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>napper@chromium.org</owner> <owner>robsc@chromium.org</owner> <summary> @@ -6032,7 +6032,7 @@ </histogram> <histogram name="Apps.AppListShowSource" enum="AppListShowSource" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>newcomer@chromium.org</owner> <summary> The number of times the different sources for showing the app list are used. @@ -6452,7 +6452,7 @@ </histogram> <histogram name="Apps.LogDisplayTypeClickedResultZeroState" - enum="AppListSearchResultDisplayType" expires_after="2020-05-03"> + enum="AppListSearchResultDisplayType" expires_after="2020-07-06"> <owner>jiameng@chromium.org</owner> <owner>thanhdng@chromium.org</owner> <owner>tby@chromium.org</owner> @@ -7004,7 +7004,7 @@ </histogram> <histogram name="Arc.FirstAppLaunchDelay.TimeDelta" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>yusukes@google.com</owner> <owner>khmel@google.com</owner> <summary> @@ -7084,7 +7084,7 @@ </summary> </histogram> -<histogram name="Arc.ImeCount" units="units" expires_after="M81"> +<histogram name="Arc.ImeCount" units="units" expires_after="2020-07-06"> <owner>yhanada@google.com</owner> <owner>tetsui@google.com</owner> <summary> @@ -7160,7 +7160,7 @@ </histogram> <histogram name="Arc.NativeBridge" enum="ArcNativeBridgeType" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>elijahtaylor@google.com</owner> <owner>levarum@google.com</owner> <summary> @@ -7964,7 +7964,7 @@ </histogram> <histogram name="Ash.Display.PrimaryDisplayZoomAtStartup" units="%" - expires_after="2020-03-01"> + expires_after="2020-07-06"> <owner>jamescook@chromium.org</owner> <owner>jessejames@chromium.org</owner> <owner>cros-system-services@google.com</owner> @@ -8114,7 +8114,7 @@ </histogram> <histogram name="Ash.GestureTarget" enum="AshGestureActionType" - expires_after="M81"> + expires_after="2020-07-06"> <obsolete> Deprecated on 01/2020, no longer useful. </obsolete> @@ -8703,7 +8703,7 @@ </histogram> <histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>kuscher@google.com</owner> <summary> The current state of the shelf (alignment) tracked over time by logging on a @@ -9012,7 +9012,7 @@ </histogram> <histogram name="Ash.TouchView.TouchViewInactive" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>girard@chromium.org</owner> <summary>The length of time between TouchView activations.</summary> </histogram> @@ -14161,7 +14161,7 @@ </histogram> <histogram name="AutoScreenBrightness.DailyUserAdjustment.Eve" units="count" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jiameng@chromium.org</owner> <summary> Number of times that a user has made brightness adjustments on an Eve device @@ -14354,7 +14354,7 @@ </histogram> <histogram name="AutoScreenBrightness.NewCurveSaved.Success" - enum="BooleanSuccess" expires_after="2020-05-03"> + enum="BooleanSuccess" expires_after="2020-07-06"> <owner>jiameng@chromium.org</owner> <summary> Whether a new curve was successfully saved to disk. Only reported if a new @@ -14363,7 +14363,7 @@ </histogram> <histogram name="AutoScreenBrightness.Opposite.UserModelBrightnessAdjustments" - units="count" expires_after="2020-05-03"> + units="count" expires_after="2020-07-06"> <owner>jiameng@chromium.org</owner> <summary> When user changes brightness manually, if the previous change was caused by @@ -14411,7 +14411,7 @@ </histogram> <histogram name="AutoScreenBrightness.TrainingCompleteDuration.NoNewCurve" - units="ms" expires_after="2020-05-03"> + units="ms" expires_after="2020-07-06"> <owner>jiameng@chromium.org</owner> <summary> The time elapsed to complete training after which no new curve was @@ -15427,7 +15427,7 @@ </histogram> <histogram name="Blink.Animate.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -16696,7 +16696,7 @@ </histogram> <histogram name="Blink.ForcedStyleAndLayout.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> <owner>paint-dev@chromium.org</owner> @@ -16809,7 +16809,7 @@ </histogram> <histogram name="Blink.IntersectionObservation.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> <owner>paint-dev@chromium.org</owner> @@ -16832,7 +16832,7 @@ </histogram> <histogram name="Blink.Layout.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> <owner>schenney@chromium.org</owner> @@ -16882,7 +16882,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.AnimateRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16894,7 +16894,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.CompositingCommitRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16906,7 +16906,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.CompositingRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16918,7 +16918,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.ForcedStyleAndLayoutRatio" - units="%" expires_after="2020-05-03"> + units="%" expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16931,7 +16931,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.HandleInputEventsRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16943,7 +16943,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.IntersectionObservationRatio" - units="%" expires_after="2020-05-03"> + units="%" expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16955,7 +16955,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.LayoutRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16967,7 +16967,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.PaintRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16979,7 +16979,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.PrePaintRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -16991,7 +16991,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.ProxyCommitRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -17003,7 +17003,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.ScrollingCoordinatorRatio" - units="%" expires_after="2020-05-03"> + units="%" expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -17028,7 +17028,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.StyleRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -17040,7 +17040,7 @@ </histogram> <histogram base="true" name="Blink.MainFrame.UpdateLayersRatio" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> @@ -17052,7 +17052,7 @@ </histogram> <histogram name="Blink.MainFrame.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17245,7 +17245,7 @@ </histogram> <histogram name="Blink.Paint.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17276,7 +17276,7 @@ </histogram> <histogram name="Blink.PrePaint.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17296,7 +17296,7 @@ </histogram> <histogram name="Blink.ProxyCommit.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17594,7 +17594,7 @@ </histogram> <histogram name="Blink.ScrollingCoordinator.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17777,7 +17777,7 @@ </histogram> <histogram name="Blink.Style.UpdateTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -17957,7 +17957,7 @@ </histogram> <histogram name="Blink.UseCounter.FeaturePolicy.Header" - enum="FeaturePolicyFeature" expires_after="2020-05-03"> + enum="FeaturePolicyFeature" expires_after="2020-07-06"> <owner>iclelland@chromium.org</owner> <summary> Counts the use of a specific feature policy via the @@ -18116,7 +18116,7 @@ </histogram> <histogram name="Blink.UseCounter.File.Features" enum="FeatureObserver" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>yhirano@chromium.org</owner> <owner>mkwst@chromium.org</owner> <summary> @@ -18881,7 +18881,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.Pairing.Result" enum="BooleanSuccess" - expires_after="2020-05-02"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="BluetoothTransportTypes" --> <owner>hansberry@chromium.org</owner> @@ -18897,7 +18897,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.Pairing.TransportType" - enum="BluetoothTransportType" expires_after="2020-05-02"> + enum="BluetoothTransportType" expires_after="2020-07-06"> <owner>hansberry@chromium.org</owner> <summary> An enumerated histogram which captures the transport type of devices which @@ -18925,7 +18925,7 @@ </histogram> <histogram name="Bluetooth.ConnectedDeviceCount" units="devices" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>adlr@chromium.org</owner> <summary> Counts the number of simulataneously connected Bluetooth devices. Used to @@ -19114,7 +19114,7 @@ </histogram> <histogram name="Bluetooth.Web.ConnectGATT.Outcome" - enum="WebBluetoothConnectGATTOutcome" expires_after="M81"> + enum="WebBluetoothConnectGATTOutcome" expires_after="2020-07-06"> <owner>odejesush@chromium.org</owner> <owner>ortuno@chromium.org</owner> <owner>reillyg@chromium.org</owner> @@ -19490,7 +19490,7 @@ </summary> </histogram> -<histogram name="BlueZ.AdapterLost" units="seconds" expires_after="2020-05-03"> +<histogram name="BlueZ.AdapterLost" units="seconds" expires_after="2020-07-06"> <owner>mcchou@chromium.org</owner> <summary> This is specific to Chrome OS. Records a duration of a Bluetooth adapter @@ -19533,7 +19533,7 @@ </histogram> <histogram name="BlueZ.ReasonOfDisconnection" enum="BlueZReasonOfDisconnection" - expires_after="2020-04-26"> + expires_after="2020-07-06"> <owner>mcchou@chromium.org</owner> <summary> This is specific to Chrome OS. Records the reason of Bluetooth disconnection @@ -19553,7 +19553,7 @@ </histogram> <histogram name="BlueZ.ResultOfConnection" enum="BlueZResultOfConnection" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>mcchou@chromium.org</owner> <summary> This is specific to Chrome OS. Records the outcomes of connection requests @@ -20196,7 +20196,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.ChildCrashes" enum="RendererType" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>wfh@chromium.org</owner> <summary>Count of renderer process crashes grouped by type.</summary> </histogram> @@ -20593,7 +20593,7 @@ </histogram> <histogram name="BrowserWindow.Resize.StepBoundsChange" units="pixels" - expires_after="M81"> + expires_after="2020-07-06"> <owner>sadrul@chromium.org</owner> <summary> Size changed between two consecutive steps during browser-window resize. @@ -20969,7 +20969,7 @@ </histogram> <histogram name="CaptivePortal.DetectResult" enum="CaptivePortalDetectResult" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>meacer@chromium.org</owner> <summary>Records the result of a captive portal probe.</summary> </histogram> @@ -21296,7 +21296,7 @@ </histogram> <histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess" - enum="BooleanSuccess" expires_after="2020-05-03"> + enum="BooleanSuccess" expires_after="2020-07-06"> <owner>posciak@chromium.org</owner> <summary> Indicates whether initialization of a video encode accelerator for Cast @@ -21689,7 +21689,7 @@ </histogram> <histogram name="ChildProcess.Killed2.OOM" enum="ProcessType2" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>oshima@chromium.org</owner> <summary> Out of ChildProcess.Killled, number of kills due to SIGKILL, which is a @@ -22054,7 +22054,7 @@ </histogram> <histogram name="ChromeColors.AppliedColor" enum="ChromeColorsInfo" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <obsolete> Deprecated 12/2019. No longer tracked. </obsolete> @@ -22079,7 +22079,7 @@ </histogram> <histogram name="ChromeColors.ColorOnLoad" enum="ChromeColorsInfo" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>gayane@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <summary> @@ -22089,7 +22089,7 @@ </histogram> <histogram name="ChromeColors.RevertReason" enum="ChromeColorsRevertReason" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <obsolete> Deprecated 12/2019. No longer tracked. </obsolete> @@ -22421,7 +22421,7 @@ </histogram> <histogram name="ChromeOS.CWP.UploadPerf" units="reports" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>aalexand@google.com</owner> <owner>gmx@chromium.org</owner> <summary> @@ -23793,7 +23793,7 @@ </histogram> <histogram name="Compositing.DirectRenderer.Software.DrawFrameUs" - units="microseconds" expires_after="M81"> + units="microseconds" expires_after="2020-07-06"> <owner>weiliangc@chromium.org</owner> <summary> Time spent drawing of composited layers by SoftwareRenderer, in @@ -24991,7 +24991,7 @@ </histogram> <histogram name="ContentCapture.CaptureContentTime" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>michaelbai@chromium.org</owner> <summary>The time taken to capture the on-screen content.</summary> </histogram> @@ -25171,14 +25171,16 @@ </histogram> <histogram name="ContentSettings.DefaultNotificationsSetting" - enum="ContentSetting" expires_after="2020-03-29"> + enum="ContentSetting" expires_after="2020-07-06"> <owner>toyoshim@chromium.org</owner> <summary>The default notification setting at profile open.</summary> </histogram> <histogram name="ContentSettings.DefaultPluginsSetting" enum="ContentSetting" - expires_after="2020-06-28"> - <owner>toyoshim@chromium.org</owner> + expires_after="M90"> + <owner>andypaicu@chromium.org</owner> + <owner>engedy@chromium.org</owner> + <owner>hkamila@chromium.org</owner> <summary>The default plugins setting at profile open.</summary> </histogram> @@ -25204,7 +25206,7 @@ </histogram> <histogram name="ContentSettings.DefaultSubresourceFilterSetting" - enum="ContentSetting" expires_after="M81"> + enum="ContentSetting" expires_after="2020-07-06"> <owner>csharrison@chromium.org</owner> <summary>The default subresource filter setting at profile open</summary> </histogram> @@ -26867,7 +26869,7 @@ </histogram> <histogram name="Cookie.CookiePrefix" enum="CookiePrefix" - expires_after="2020-03-08"> + expires_after="2020-07-06"> <owner>estark@chromium.org</owner> <summary> Number of times a cookie was set with a name prefixed by @@ -26902,7 +26904,7 @@ </histogram> <histogram name="Cookie.CookieSourceScheme" enum="CookieSourceScheme" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>estark@chromium.org</owner> <summary> For each cookie added to the store, record whether its source URL has a @@ -28506,7 +28508,7 @@ </histogram> <histogram name="CrosDisksClient.MountCompletedError" - enum="CrosDisksClientMountError" expires_after="2020-05-03"> + enum="CrosDisksClientMountError" expires_after="2020-07-06"> <owner>amistry@chromium.org</owner> <summary> The error code of disk mount signals received from the Chrome OS cros-disks @@ -28524,7 +28526,7 @@ </histogram> <histogram name="CrosDisksClient.MountTime" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>amistry@chromium.org</owner> <summary> Time taken by the Chrome OS cros-disks daemon to perform a Mount operation. @@ -28541,7 +28543,7 @@ </histogram> <histogram name="CrosDisksClient.UnmountTime" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>amistry@chromium.org</owner> <summary> Time taken by the Chrome OS cros-disks daemon to perform an Unmount @@ -29340,7 +29342,7 @@ </histogram> <histogram name="Cryptohome.AsyncDBusRequest" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary> @@ -29594,7 +29596,7 @@ </histogram> <histogram base="true" name="Cryptohome.LECredential" - enum="CryptohomeLECredError" expires_after="2020-02-23"> + enum="CryptohomeLECredError" expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="LECredentialOps" --> <owner>pmalani@chromium.org</owner> @@ -39194,7 +39196,7 @@ </histogram> <histogram name="Download.Service.Files.FreeDiskSpace" units="%" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>xingliu@chromium.org</owner> <summary> The percentage of free disk space to total disk space. Recorded during @@ -39260,7 +39262,7 @@ </histogram> <histogram name="Download.Service.Finish.Type" - enum="Download.Service.CompletionType" expires_after="2020-05-03"> + enum="Download.Service.CompletionType" expires_after="2020-07-06"> <owner>xingliu@chromium.org</owner> <summary>The completion type for downloads in download service.</summary> </histogram> @@ -39490,7 +39492,7 @@ </histogram> <histogram name="Download.Start.ContentType.InsecureChain" - enum="DownloadContentType" expires_after="2020-05-03"> + enum="DownloadContentType" expires_after="2020-07-06"> <owner>cthomp@chromium.org</owner> <owner>estark@chromium.org</owner> <summary> @@ -41205,7 +41207,7 @@ </histogram> <histogram name="Enterprise.FCMInvalidationService.DevicePolicyInvalidations" - enum="EnterprisePolicyInvalidations" expires_after="2020-05-03"> + enum="EnterprisePolicyInvalidations" expires_after="2020-07-06"> <owner>askaraitzhan@google.com</owner> <owner>isandrk@chromium.org</owner> <summary> @@ -41410,7 +41412,7 @@ <histogram name="Enterprise.MachineLevelUserCloudPolicyEnrollment.Result" enum="MachineLevelUserCloudPolicyEnrollmentResult" - expires_after="2020-04-26"> + expires_after="2020-07-06"> <owner>zmin@chromium.org</owner> <summary>The result of machine level user cloud policy enrollment.</summary> </histogram> @@ -41707,7 +41709,7 @@ </histogram> <histogram name="Enterprise.TiclInvalidationService.DevicePolicyInvalidations" - enum="EnterprisePolicyInvalidations" expires_after="2020-05-03"> + enum="EnterprisePolicyInvalidations" expires_after="2020-07-06"> <owner>askaraitzhan@google.com</owner> <owner>isandrk@chromium.org</owner> <summary> @@ -42059,7 +42061,7 @@ </histogram> <histogram name="EnterpriseCheck.IsDomainJoined" enum="BooleanEnabled" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>mad@chromium.org</owner> <summary> Whether the machine is joined to an AD domain. This check is performed once @@ -42248,6 +42250,9 @@ <histogram name="Event.AsyncTargeting.TimeInQueue" units="ms" expires_after="2020-06-28"> + <obsolete> + Deprecated as of 01/2020. The feature has been launched. + </obsolete> <owner>yigu@chromium.org</owner> <summary> Tracks how long an event has to wait in the queue while a previous event is @@ -43475,7 +43480,7 @@ </histogram> <histogram name="Event.Latency.EndToEnd.Mouse" units="microseconds" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>input-dev@chromium.org</owner> <summary> Time between the OS receiving a mouse event and the resulting GPU frame @@ -45902,6 +45907,9 @@ <histogram name="Event.VizHitTest.AggregateTimeUs" units="microseconds" expires_after="M81"> + <obsolete> + Deprecated as of 01/2020. The feature has been launched. + </obsolete> <owner>yigu@chromium.org</owner> <owner>event-targeting@chromium.org</owner> <summary> @@ -45933,6 +45941,9 @@ <histogram name="Event.VizHitTest.HitTestRegions" units="regions" expires_after="2020-06-28"> + <obsolete> + Deprecated as of 01/2020. The feature has been launched. + </obsolete> <owner>yigu@chromium.org</owner> <owner>event-targeting@chromium.org</owner> <summary> @@ -45955,6 +45966,9 @@ <histogram name="Event.VizHitTest.TargetTimeUs" units="microseconds" expires_after="2020-06-28"> + <obsolete> + Deprecated as of 01/2020. The feature has been launched. + </obsolete> <owner>yigu@chromium.org</owner> <owner>event-targeting@chromium.org</owner> <summary> @@ -45978,6 +45992,9 @@ <histogram name="Event.VizHitTest.TransformTimeUs" units="microseconds" expires_after="2020-06-28"> + <obsolete> + Deprecated as of 01/2020. The feature has been launched. + </obsolete> <owner>yigu@chromium.org</owner> <owner>event-targeting@chromium.org</owner> <summary> @@ -55624,7 +55641,7 @@ </histogram> <histogram name="GPU.D3DShaderModel" enum="ShaderModel" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jmadill@chromium.org</owner> <summary> ANGLE's currently active D3D shader model version. Logged once every startup @@ -56259,7 +56276,7 @@ </histogram> <histogram name="GPU.GPUProcessExitCode" enum="GPUProcessExitCode" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jbauman@chromium.org</owner> <summary> Counts for the exit codes returned by the GPU process when it terminated. @@ -56435,7 +56452,7 @@ </histogram> <histogram name="GPU.MaxMSAASampleCount" units="samples" - expires_after="2020-03-01"> + expires_after="2020-07-06"> <owner>senorblanco@chromium.org</owner> <summary> The maximum number of multisampled anti-aliasing (MSAA) samples per pixel @@ -57031,7 +57048,7 @@ </histogram> <histogram name="GPU.WatchdogThread.ExtraThreadTime" units="# timeouts" - expires_after="2020-05-01"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" --> <owner>magchen@chromium.org</owner> @@ -57043,7 +57060,7 @@ </histogram> <histogram name="GPU.WatchdogThread.Timeout" enum="GpuWatchdogTimeoutEvent" - expires_after="2020-05-01"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" --> <owner>magchen@chromium.org</owner> @@ -57054,7 +57071,7 @@ </histogram> <histogram name="GPU.WatchdogThread.V1.ExtraThreadTime" units="ms" - expires_after="2020-05-01"> + expires_after="2020-07-06"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -57064,7 +57081,7 @@ </histogram> <histogram name="GPU.WatchdogThread.V1.Timeout" enum="GpuWatchdogTimeoutEvent" - expires_after="2020-05-01"> + expires_after="2020-07-06"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -57083,7 +57100,7 @@ </histogram> <histogram name="GPU.WatchdogThread.WaitTime" units="ms" - expires_after="2020-05-01"> + expires_after="2020-07-06"> <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" --> <owner>magchen@chromium.org</owner> @@ -58912,7 +58929,7 @@ </summary> </histogram> -<histogram name="HttpCache.BeforeSend" units="ms" expires_after="2020-05-03"> +<histogram name="HttpCache.BeforeSend" units="ms" expires_after="2020-07-06"> <owner>morlovich@chromium.org</owner> <summary> For http cache transactions in which a network request was sent, the time @@ -62678,7 +62695,7 @@ </histogram> <histogram name="JSDialogs.CharacterCount" units="characters" - expires_after="M81"> + expires_after="2020-07-06"> <obsolete> Deprecated 2020-01. </obsolete> @@ -64106,7 +64123,7 @@ </histogram> <histogram base="true" name="LocalNetworkRequests.PrivatePage" units="requests" - expires_after="M81"> + expires_after="2020-07-06"> <owner>uthakore@chromium.org</owner> <owner>invernizzi@chromium.org</owner> <summary> @@ -76814,7 +76831,7 @@ <histogram name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Result.FailureReason" enum="MultiDevice_DeviceSyncService_DeviceSyncRequestFailureReason" - expires_after="2020-04-19"> + expires_after="2020-07-06"> <owner>vecore@google.com</owner> <owner>better-together-dev@google.com</owner> <summary> @@ -76929,7 +76946,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.StartScanToReceiveAdvertisementDuration.Background" - units="ms" expires_after="2020-05-03"> + units="ms" expires_after="2020-07-06"> <owner>vecore@google.com</owner> <owner>better-together-dev@google.com</owner> <summary> @@ -98221,7 +98238,7 @@ </histogram> <histogram name="NQE.WifiSignalStrength.LevelAvailable" enum="BooleanAvailable" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>tbansal@chromium.org</owner> <owner>bengr@chromium.org</owner> <summary> @@ -103061,7 +103078,7 @@ </histogram> <histogram name="Overscroll.Navigated3" enum="OverscrollNavigationType" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>nzolghadr@chromium.org</owner> <summary> Navigations that were triggered due to completed overscroll gesture. Note @@ -116452,7 +116469,7 @@ </summary> </histogram> -<histogram name="Power.BacklightLevelOnAC" units="%" expires_after="2020-05-03"> +<histogram name="Power.BacklightLevelOnAC" units="%" expires_after="2020-07-06"> <owner>tbroch@chromium.org</owner> <summary> The level of the backlight as a percentage when the user is on AC. Sampled @@ -117164,7 +117181,7 @@ </histogram> <histogram name="Power.NumberOfSessionsPerCharge" units="units" - expires_after="2020-04-26"> + expires_after="2020-07-06"> <owner>tbroch@chromium.org</owner> <summary> The number of user sessions that occured since the last time that the device @@ -117373,7 +117390,7 @@ </histogram> <histogram name="Power.UserBrightnessAdjustmentsPerSessionOnBattery" - units="units" expires_after="2020-05-03"> + units="units" expires_after="2020-07-06"> <owner>tbroch@chromium.org</owner> <owner>jiameng@chromium.org</owner> <summary> @@ -120717,7 +120734,7 @@ </histogram> <histogram name="Privacy.DoNotTrackSetting" enum="BooleanEnabled" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>mkwst@chromium.org</owner> <owner>msramek@chromium.org</owner> <summary> @@ -120810,7 +120827,7 @@ </histogram> <histogram name="Profile.AddNewUser" enum="ProfileAddNewUser" - expires_after="2020-04-19"> + expires_after="2020-07-06"> <owner>rogerta@chromium.org</owner> <summary>The frequency of ways that new user profiles are added.</summary> </histogram> @@ -121219,7 +121236,7 @@ </histogram> <histogram name="Profile.NumberOfNamedProfiles" units="count" - expires_after="2020-04-01"> + expires_after="2020-07-06"> <owner>feuunk@chromium.org</owner> <owner>msarda@chromium.org</owner> <summary> @@ -132607,7 +132624,7 @@ </histogram> <histogram name="SBIRS.PSSLoadResult" enum="PlatformStateStoreLoadResult" - expires_after="M81"> + expires_after="2020-07-06"> <owner>grt@google.com</owner> <summary>The result of loading data from the platform state store.</summary> </histogram> @@ -141695,8 +141712,9 @@ </histogram> <histogram name="ShortcutsProvider.QueryIndexTime" units="ms" - expires_after="M81"> - <owner>davidben@chromium.org</owner> + expires_after="2020-09-19"> + <owner>manukh@chromium.org</owner> + <owner>chrome-omnibox-team@google.com</owner> <summary> The time it takes for the ShortcutsProvider to perform a query after the user has typed N characters. @@ -147243,7 +147261,7 @@ </histogram> <histogram name="Stability.Android.ProcessedRealMinidumps" - enum="AndroidProcessedMinidumps" expires_after="M81"> + enum="AndroidProcessedMinidumps" expires_after="2021-01-06"> <owner>mheikal@chromium.org</owner> <owner>smaier@chromium.org</owner> <owner>wnwen@chromium.org</owner> @@ -147256,7 +147274,7 @@ </histogram> <histogram name="Stability.Android.ProcessedSimulatedMinidumps" - enum="AndroidProcessedMinidumps" expires_after="M81"> + enum="AndroidProcessedMinidumps" expires_after="2021-01-06"> <owner>mheikal@chromium.org</owner> <owner>smaier@chromium.org</owner> <owner>wnwen@chromium.org</owner> @@ -148112,7 +148130,7 @@ </histogram> <histogram name="Startup.BrowserMainToRendererMain" units="ms" - expires_after="M81"> + expires_after="2020-07-06"> <owner>fdoray@chromium.org</owner> <summary> Time from the ChromeMain() entry in the browser process to the first @@ -148146,7 +148164,7 @@ </histogram> <histogram name="Startup.BrowserMessageLoopStartHardFaultCount" units="faults" - expires_after="2020-02-23"> + expires_after="2020-07-06"> <owner>chrisha@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -148279,7 +148297,7 @@ </histogram> <histogram name="Startup.BrowserWindow.FirstPaint" units="ms" - expires_after="2020-04-26"> + expires_after="2020-07-06"> <owner>mblsha@yandex-team.ru</owner> <summary> Time from browser startup to the time the first Browser window has finished @@ -148298,7 +148316,8 @@ </summary> </histogram> -<histogram name="Startup.BrowserWindowDisplay" units="ms" expires_after="M81"> +<histogram name="Startup.BrowserWindowDisplay" units="ms" + expires_after="2020-07-06"> <owner>fdoray@chromium.org</owner> <summary> Time from browser startup to the time the browser window initially becomes @@ -148331,7 +148350,7 @@ </histogram> <histogram name="Startup.ColdStartWithExternalURLTime" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>jif@chromium.org</owner> <summary> The duration of all initializations in a cold start triggered by an external @@ -149044,7 +149063,7 @@ </summary> </histogram> -<histogram name="Startup.SystemUptime" units="ms" expires_after="M81"> +<histogram name="Startup.SystemUptime" units="ms" expires_after="2020-07-06"> <owner>fdoray@chromium.org</owner> <summary> The time elapsed between system boot and Chrome browser process launch. This @@ -149053,7 +149072,7 @@ </histogram> <histogram name="Startup.Temperature" enum="StartupTemperature" - expires_after="2020-02-23"> + expires_after="2020-07-06"> <owner>chrisha@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -149215,7 +149234,7 @@ </histogram> <histogram name="Storage.Blob.FileReaderLoader.FailureType" - enum="FileReaderLoaderFailureType" expires_after="M81"> + enum="FileReaderLoaderFailureType" expires_after="2020-07-06"> <owner>dmurph@chromium.org</owner> <summary> Recorded when an error occurs in the FileReaderLoader, which is used to load @@ -149228,7 +149247,7 @@ </histogram> <histogram name="Storage.Blob.FileReaderLoader.ReadError" enum="NetErrorCodes" - expires_after="M81"> + expires_after="2020-07-06"> <owner>dmurph@chromium.org</owner> <summary> The error code reported by the blob system while trying to read a blob in @@ -149387,7 +149406,7 @@ </histogram> <histogram base="true" name="Storage.Blob.SizeEvictedToDiskInKB" units="KB" - expires_after="M81"> + expires_after="2020-07-06"> <owner>ssid@chromium.org</owner> <summary>Records the total size of in-memory blobs evicted to disk.</summary> </histogram> @@ -152345,7 +152364,7 @@ </histogram> <histogram base="true" name="Sync.ModelTypeConfigurationTime.Ephemeral" - units="ms" expires_after="2020-05-01"> + units="ms" expires_after="2020-07-06"> <owner>jkrcal@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -152954,7 +152973,7 @@ </histogram> <histogram name="Sync.PostedClientToServerMessageLatency" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>mastiz@chromium.org</owner> <summary> Time taken for a client-initiated request to be sent over the network and @@ -160263,7 +160282,7 @@ </histogram> <histogram name="UMA.TruncatedEvents.UserAction" units="events" - expires_after="2020-06-28"> + expires_after="2020-07-06"> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -162074,7 +162093,7 @@ </summary> </histogram> -<histogram name="V8.GCBackgroundMarking" units="ms" expires_after="2020-05-03"> +<histogram name="V8.GCBackgroundMarking" units="ms" expires_after="2020-07-06"> <owner>ulan@chromium.org</owner> <summary> Time spent in background tasks doing marking in one GC cycle. It is recorded @@ -165333,7 +165352,7 @@ </histogram> <histogram base="true" name="WebApk.Uninstall" enum="BooleanHit" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>pkotwicz@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary>Records that a WebAPK was uninstalled.</summary> @@ -165739,7 +165758,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.Length" units="frames" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165749,7 +165768,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.NumberOfChannels" units="units" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165773,7 +165792,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165798,7 +165817,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz" units="units" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165819,7 +165838,7 @@ </histogram> <histogram name="WebAudio.AudioContext.MaxChannelsAvailable" units="units" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165852,7 +165871,7 @@ </histogram> <histogram name="WebAudio.AudioDestination.CallbackBufferSize" units="units" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -165982,7 +166001,7 @@ </histogram> <histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -166004,7 +166023,7 @@ </histogram> <histogram name="WebAudio.IIRFilterNode.Order" units="units" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -166063,7 +166082,7 @@ </histogram> <histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -166076,7 +166095,7 @@ </histogram> <histogram name="WebAudio.PushPullFIFO.UnderflowGlitches" enum="Boolean" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -166087,7 +166106,7 @@ </histogram> <histogram name="WebAudio.PushPullFIFO.UnderflowPercentage" units="%" - expires_after="M81"> + expires_after="2020-07-06"> <owner>rtoy@chromium.org</owner> <owner>hongchan@chromium.org</owner> <summary> @@ -166754,7 +166773,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Corruption" - enum="LevelDBCorruptionTypes" expires_after="2020-05-03"> + enum="LevelDBCorruptionTypes" expires_after="2020-07-06"> <owner>dgrogan@chromium.org</owner> <summary> Types of corruption that LevelDB encounters when opening a database. @@ -166860,7 +166879,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE" - enum="PlatformFileError" expires_after="2020-05-03"> + enum="PlatformFileError" expires_after="2020-07-06"> <owner>cmumford@chromium.org</owner> <summary> Errors (base::File::Error) encountered by a single LevelDBEnv method when @@ -167162,7 +167181,7 @@ </histogram> <histogram name="WebCore.IndexedDB.SchemaVersion" units="version" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>dmurph@chromium.org</owner> <summary> Records the schema version of the IndexedDB database read from disk. @@ -167176,7 +167195,7 @@ </histogram> <histogram name="WebCore.IndexedDB.SchemaVersion.Docs" units="version" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>dmurph@chromium.org</owner> <summary> Records the schema version of the IndexedDB database read from disk. @@ -167413,7 +167432,7 @@ </histogram> <histogram name="WebCore.IndexedDB.TransactionAbortReason" enum="IDBException" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>dmurph@chromium.org</owner> <summary> Recorded on the browser side (back end) when an IndexedDB transaction is @@ -167993,7 +168012,7 @@ </histogram> <histogram base="true" name="WebFont.HttpCacheStatus" enum="HttpCachePattern" - expires_after="M81"> + expires_after="2020-07-06"> <owner>kenjibaheux@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <summary> @@ -168145,7 +168164,7 @@ </histogram> <histogram name="WebFont.PackageFormat" enum="WebFontPackageFormat" - expires_after="M81"> + expires_after="2020-07-06"> <obsolete> Removed Jan 2020. </obsolete> @@ -168285,7 +168304,7 @@ </histogram> <histogram name="WebP.DecodedImageFormat" enum="WebpDecodedFormat" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>droger@chromium.org</owner> <summary> Histogram for the format of decoded WebP images on iOS, as Chrome re-encodes @@ -169046,7 +169065,7 @@ </histogram> <histogram name="WebRTC.Audio.ReceiverDelayEstimateMs" units="ms" - expires_after="M81"> + expires_after="2020-07-06"> <owner>hlundin@chromium.org</owner> <summary> The sum of the jitter buffer delay and the sound card's buffering delay for @@ -169861,7 +169880,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.SdpSemanticNegotiated" - enum="PeerConnectionSdpSemanticNegotiated" expires_after="2020-05-03"> + enum="PeerConnectionSdpSemanticNegotiated" expires_after="2020-07-06"> <owner>hta@chromium.org</owner> <summary> What SDP semantic (Unified Plan or Plan B) was detected when completing @@ -169973,7 +169992,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.TimeToConnect" units="ms" - expires_after="2020-05-03"> + expires_after="2020-07-06"> <owner>qingsi@google.com</owner> <owner>jeroendb@google.com</owner> <summary>Time to setup a peer to peer call with PeerConnection.</summary> @@ -184679,9 +184698,8 @@ label="Password protection triggered by entering a password that matches either/both the sync password, signed-in non-syncing password, or a saved password. This is a superset of (and should - be equal to or larger than) SyncPasswordEntry and - ProtectedPasswordEntry/SavedPasswordEntry and - NonSyncPasswordEntry"/> + be equal to or larger than) SyncPasswordEntry + + SavedPasswordEntry + NonSyncPasswordEntry"/> <suffix name="GmailNonSyncPasswordEntry" label="Password protection triggered by entering a non-syncing gaia password that is associated with a Gmail account. This is a @@ -184715,7 +184733,12 @@ <suffix name="ProtectedPasswordEntry" label="Password protection triggered by entering a saved password that does NOT match a password that is currently signed-in. This is - the same as SavedPaswordEntry."/> + the same as SavedPaswordEntry."> + <obsolete> + Replaced by SavedPasswordEntry+SyncPasswordEntry+NonSyncPasswordEntry in + M77. + </obsolete> + </suffix> <suffix name="SavedPasswordEntry" label="Password protection triggered by entering a password saved in the password manager where the account is not signed-in to
diff --git a/tools/perf/core/tbmv3/trace_processor.py b/tools/perf/core/tbmv3/trace_processor.py index 8ac87c2..0e66b05b 100644 --- a/tools/perf/core/tbmv3/trace_processor.py +++ b/tools/perf/core/tbmv3/trace_processor.py
@@ -16,6 +16,12 @@ EXPORT_JSON_QUERY_TEMPLATE = 'select export_json(%s)\n' METRICS_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), 'metrics')) +_TP_NOT_SUPPLIED_ERROR_MSG = """ +Proto trace format selected but trace processor executable is not supplied. +Either pass --legacy-json-trace-format flag to force using the json format, +or build the trace_processor_shell target and supply the path to the binary +via the --trace-processor-path flag. +""" MetricFiles = namedtuple('MetricFiles', ('sql', 'proto', 'config')) @@ -27,8 +33,7 @@ def _CheckTraceProcessor(trace_processor_path): if trace_processor_path is None: - raise RuntimeError('Trace processor executable is not supplied. ' - 'Please use the --trace-processor-path flag.') + raise RuntimeError(_TP_NOT_SUPPLIED_ERROR_MSG) if not os.path.isfile(trace_processor_path): raise RuntimeError("Can't find trace processor executable at %s" % trace_processor_path)
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 25634ed..2d0d953 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -337,7 +337,6 @@ crbug.com/1014655 [ android-webview ] system_health.common_mobile/browse:social:instagram:2019 [ Skip ] crbug.com/1036141 [ android-webview ] system_health.common_mobile/browse:shopping:lazada:2019 [ Skip ] crbug.com/1036143 [ android-pixel-2 ] system_health.common_mobile/browse:chrome:omnibox:2019 [ Skip ] -crbug.com/1039734 [ android-go ] system_health.common_mobile/browse:news:washingtonpost:2019 [ Skip ] crbug.com/1039801 [ android-webview ] system_health.memory_mobile/browse:social:pinterest_infinite_scroll:2019 [ Skip ] # Benchmark: system_health.memory_desktop
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn index a51cbdce..efc671b8 100644 --- a/ui/accessibility/BUILD.gn +++ b/ui/accessibility/BUILD.gn
@@ -108,6 +108,7 @@ "ax_tree_source.h", "ax_tree_source_checker.h", "ax_tree_update.h", + "ax_tree_update_forward.h", "null_ax_action_target.cc", "null_ax_action_target.h", "platform/ax_android_constants.cc",
diff --git a/ui/accessibility/ax_tree_update_forward.h b/ui/accessibility/ax_tree_update_forward.h new file mode 100644 index 0000000..c59dfaa --- /dev/null +++ b/ui/accessibility/ax_tree_update_forward.h
@@ -0,0 +1,18 @@ +// 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. + +#ifndef UI_ACCESSIBILITY_AX_TREE_UPDATE_FORWARD_H_ +#define UI_ACCESSIBILITY_AX_TREE_UPDATE_FORWARD_H_ + +namespace ui { + +struct AXNodeData; +struct AXTreeData; +template <typename A, typename B> +struct AXTreeUpdateBase; +using AXTreeUpdate = AXTreeUpdateBase<AXNodeData, AXTreeData>; + +} // namespace ui + +#endif // UI_ACCESSIBILITY_AX_TREE_UPDATE_FORWARD_H_
diff --git a/ui/aura/native_window_occlusion_tracker_win.cc b/ui/aura/native_window_occlusion_tracker_win.cc index 920ed3d9..a49a34f 100644 --- a/ui/aura/native_window_occlusion_tracker_win.cc +++ b/ui/aura/native_window_occlusion_tracker_win.cc
@@ -263,8 +263,7 @@ void NativeWindowOcclusionTrackerWin::WindowOcclusionCalculator:: EnableOcclusionTrackingForWindow(HWND hwnd) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - NativeWindowOcclusionState default_state; - root_window_hwnds_occlusion_state_[hwnd] = default_state; + root_window_hwnds_occlusion_state_[hwnd] = Window::OcclusionState::UNKNOWN; if (global_event_hooks_.empty()) RegisterEventHooks(); @@ -355,38 +354,26 @@ SkIRect::MakeLTRB(screen_left, screen_top, screen_left + GetSystemMetrics(SM_CXVIRTUALSCREEN), screen_top + GetSystemMetrics(SM_CYVIRTUALSCREEN))); + num_root_windows_with_unknown_occlusion_state_ = 0; for (auto& root_window_pair : root_window_hwnds_occlusion_state_) { - root_window_pair.second.unoccluded_region.setEmpty(); HWND hwnd = root_window_pair.first; // IsIconic() checks for a minimized window. Immediately set the state of // minimized windows to HIDDEN. if (IsIconic(hwnd)) { - root_window_pair.second.occlusion_state = Window::OcclusionState::HIDDEN; + root_window_pair.second = Window::OcclusionState::HIDDEN; } else if (IsWindowOnCurrentVirtualDesktop(hwnd) == false) { // If window is not on the current virtual desktop, immediately // set the state of the window to OCCLUDED. - root_window_pair.second.occlusion_state = - Window::OcclusionState::OCCLUDED; + root_window_pair.second = Window::OcclusionState::OCCLUDED; // Don't unregister event hooks when not on current desktop. There's no // notification when that changes, so we can't reregister event hooks. should_unregister_event_hooks = false; } else { - root_window_pair.second.occlusion_state = Window::OcclusionState::UNKNOWN; - RECT window_rect; - if (GetWindowRect(hwnd, &window_rect) != 0) { - root_window_pair.second.unoccluded_region = - SkRegion(SkIRect::MakeLTRB(window_rect.left, window_rect.top, - window_rect.right, window_rect.bottom)); - // Clip the unoccluded region by the screen dimensions, to handle the - // case of the app window being partly off screen. - root_window_pair.second.unoccluded_region.op(screen_region, - SkRegion::kIntersect_Op); - } - // If call to GetWindowRect fails, window will be treated as occluded, - // because unoccluded_region will be empty. + root_window_pair.second = Window::OcclusionState::UNKNOWN; should_unregister_event_hooks = false; + num_root_windows_with_unknown_occlusion_state_++; } } // Unregister event hooks if all native windows are minimized. @@ -394,6 +381,7 @@ UnregisterEventHooks(); } else { base::flat_set<DWORD> current_pids_with_visible_windows; + unoccluded_desktop_region_ = screen_region; // Calculate unoccluded region if there is a non-minimized native window. // Also compute |current_pids_with_visible_windows| as we enumerate // the windows. @@ -425,27 +413,13 @@ }); } } - // Determine new occlusion status and post a task to the browser ui - // thread to update the window occlusion state on the root windows. - base::flat_map<HWND, Window::OcclusionState> window_occlusion_states; - - for (auto& root_window_pair : root_window_hwnds_occlusion_state_) { - Window::OcclusionState new_state; - if (root_window_pair.second.occlusion_state != - Window::OcclusionState::UNKNOWN) { - new_state = root_window_pair.second.occlusion_state; - } else { - new_state = root_window_pair.second.unoccluded_region.isEmpty() - ? Window::OcclusionState::OCCLUDED - : Window::OcclusionState::VISIBLE; - } - window_occlusion_states[root_window_pair.first] = new_state; - root_window_pair.second.occlusion_state = new_state; - } + // Post a task to the browser ui thread to update the window occlusion state + // on the root windows. ui_thread_task_runner_->PostTask( FROM_HERE, base::BindOnce(&NativeWindowOcclusionTrackerWin::UpdateOcclusionState, - base::Unretained(g_tracker), window_occlusion_states)); + base::Unretained(g_tracker), + root_window_hwnds_occlusion_state_)); } void NativeWindowOcclusionTrackerWin::WindowOcclusionCalculator:: @@ -524,46 +498,57 @@ base::flat_set<DWORD>* current_pids_with_visible_windows) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SkRegion curr_unoccluded_destkop = unoccluded_desktop_region_; gfx::Rect window_rect; - // Check if |hwnd| is a root_window; if so, we're done figuring out - // if it's occluded because we've seen all the windows "over" it. - // TODO(davidbienvenu): Explore checking if occlusion state has been - // computed for all |root_window_hwnds_occlusion_state_|, and if so, skipping - // further oclcusion calculations. However, we still want to keep computing - // |current_pids_with_visible_windows_|, so this function always returns true. - auto it = root_window_hwnds_occlusion_state_.find(hwnd); - if (it != root_window_hwnds_occlusion_state_.end() && - it->second.occlusion_state != Window::OcclusionState::HIDDEN) { - it->second.occlusion_state = it->second.unoccluded_region.isEmpty() - ? Window::OcclusionState::OCCLUDED - : Window::OcclusionState::VISIBLE; + bool window_is_occluding = + WindowCanOccludeOtherWindowsOnCurrentVirtualDesktop(hwnd, &window_rect); + if (window_is_occluding) { + // Hook this window's process with EVENT_OBJECT_LOCATION_CHANGE, if we are + // not already doing so. + DWORD pid; + GetWindowThreadProcessId(hwnd, &pid); + current_pids_with_visible_windows->insert(pid); + if (!base::Contains(process_event_hooks_, pid)) + RegisterEventHookForProcess(pid); + + // If no more root windows to consider, return true so we can continue + // looking for windows we haven't hooked. + if (num_root_windows_with_unknown_occlusion_state_ == 0) + return true; + + SkRegion window_region(SkIRect::MakeLTRB(window_rect.x(), window_rect.y(), + window_rect.right(), + window_rect.bottom())); + unoccluded_desktop_region_.op(window_region, SkRegion::kDifference_Op); + } else if (num_root_windows_with_unknown_occlusion_state_ == 0) { + // This window can't occlude other windows, but we've determined the + // occlusion state of all root windows, so we can return. + return true; } - if (!WindowCanOccludeOtherWindowsOnCurrentVirtualDesktop(hwnd, &window_rect)) + // Check if |hwnd| is a root window; if so, we're done figuring out + // if it's occluded because we've seen all the windows "over" it. + auto it = root_window_hwnds_occlusion_state_.find(hwnd); + if (it == root_window_hwnds_occlusion_state_.end() || + it->second != Window::OcclusionState::UNKNOWN) { return true; - // We are interested in this window, but are not currently hooking it with - // EVENT_OBJECT_LOCATION_CHANGE, so we need to hook it. We check - // this by seeing if its PID is in |process_event_hooks_|. - DWORD pid; - GetWindowThreadProcessId(hwnd, &pid); - current_pids_with_visible_windows->insert(pid); - if (!base::Contains(process_event_hooks_, pid)) - RegisterEventHookForProcess(pid); + } - SkRegion window_region(SkIRect::MakeLTRB(window_rect.x(), window_rect.y(), - window_rect.right(), - window_rect.bottom())); + // On Win7, default theme makes root windows have complex regions by + // default. But we can still check if their bounding rect is occluded. + if (!window_is_occluding) { + RECT rect; + if (::GetWindowRect(hwnd, &rect) != 0) { + SkRegion window_region( + SkIRect::MakeLTRB(rect.left, rect.top, rect.right, rect.bottom)); - for (auto& root_window_pair : root_window_hwnds_occlusion_state_) { - if (root_window_pair.second.occlusion_state != - Window::OcclusionState::UNKNOWN) - continue; - if (!root_window_pair.second.unoccluded_region.op( - window_region, SkRegion::kDifference_Op)) { - root_window_pair.second.occlusion_state = - Window::OcclusionState::OCCLUDED; + curr_unoccluded_destkop.op(window_region, SkRegion::kDifference_Op); } } + it->second = (unoccluded_desktop_region_ == curr_unoccluded_destkop) + ? Window::OcclusionState::OCCLUDED + : Window::OcclusionState::VISIBLE; + num_root_windows_with_unknown_occlusion_state_--; return true; }
diff --git a/ui/aura/native_window_occlusion_tracker_win.h b/ui/aura/native_window_occlusion_tracker_win.h index 0b433367..7746998 100644 --- a/ui/aura/native_window_occlusion_tracker_win.h +++ b/ui/aura/native_window_occlusion_tracker_win.h
@@ -78,17 +78,6 @@ friend class NativeWindowOcclusionTrackerTest; friend class test::AuraTestHelper; - struct NativeWindowOcclusionState { - // The region of the native window that is not occluded by other windows. - SkRegion unoccluded_region; - - // The current occlusion state of the native window. Default to UNKNOWN - // because we do not know the state starting out. More information on - // these states can be found in aura::Window. - aura::Window::OcclusionState occlusion_state = - aura::Window::OcclusionState::UNKNOWN; - }; - // Registers event hooks, if not registered. void MaybeRegisterEventHooks(); @@ -184,7 +173,7 @@ // Map of root app window hwnds and their occlusion state. This contains // both visible and hidden windows. - base::flat_map<HWND, NativeWindowOcclusionState> + base::flat_map<HWND, Window::OcclusionState> root_window_hwnds_occlusion_state_; // Values returned by SetWinEventHook are stored so that hooks can be @@ -207,6 +196,19 @@ // calculating window occlusion. bool window_is_moving_ = false; + // Used to determine if a root window is occluded. As we iterate through the + // hwnds in z-order, we subtract each opaque window's rect from + // |unoccluded_desktop_region_|. When we get to a root window, we subtract + // it from |unoccluded_desktop_region_|, and if |unoccluded_desktop_region_| + // doesn't change, the root window was already occluded. + SkRegion unoccluded_desktop_region_; + + // Keeps track of how many root windows we need to compute the occlusion + // state of in a call to ComputeNativeWindowOcclusionStatus. Once we've + // determined the state of all root windows, we can stop subtracting + // windows from |unoccluded_desktop_region_|. + int num_root_windows_with_unknown_occlusion_state_; + // Only used on Win10+. Microsoft::WRL::ComPtr<IVirtualDesktopManager> virtual_desktop_manager_;
diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc index a3e869a7..025a82c 100644 --- a/ui/base/accelerators/accelerator.cc +++ b/ui/base/accelerators/accelerator.cc
@@ -176,6 +176,9 @@ #endif } +#if defined(OS_MACOSX) + shortcut = ApplyShortFormModifiers(shortcut); +#else // Checking whether the character used for the accelerator is alphanumeric. // If it is not, then we need to adjust the string later on if the locale is // right-to-left. See below for more information of why such adjustment is @@ -188,11 +191,7 @@ shortcut_rtl.assign(shortcut); } -#if defined(OS_MACOSX) - shortcut = ApplyShortFormModifiers(shortcut); -#else shortcut = ApplyLongFormModifiers(shortcut); -#endif // For some reason, menus in Windows ignore standard Unicode directionality // marks (such as LRE, PDF, etc.). On RTL locales, we use RTL menus and @@ -223,6 +222,7 @@ shortcut_rtl.append(shortcut, 0, shortcut.length() - key_length - 1); shortcut.swap(shortcut_rtl); } +#endif // OS_MACOSX return shortcut; }
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc index 4221d6a..758b85c8 100644 --- a/ui/base/resource/resource_bundle.cc +++ b/ui/base/resource/resource_bundle.cc
@@ -73,7 +73,7 @@ const char kPakFileExtension[] = ".pak"; #endif -ResourceBundle* g_shared_instance_ = NULL; +ResourceBundle* g_shared_instance_ = nullptr; base::FilePath GetResourcesPakFilePath(const std::string& pak_name) { base::FilePath path; @@ -266,7 +266,7 @@ void ResourceBundle::InitSharedInstanceWithPakFileRegion( base::File pak_file, const base::MemoryMappedFile::Region& region) { - InitSharedInstance(NULL); + InitSharedInstance(nullptr); auto data_pack = std::make_unique<DataPack>(SCALE_FACTOR_100P); if (!data_pack->LoadFromFileRegion(std::move(pak_file), region)) { LOG(WARNING) << "failed to load pak file"; @@ -279,7 +279,7 @@ // static void ResourceBundle::InitSharedInstanceWithPakPath(const base::FilePath& path) { - InitSharedInstance(NULL); + InitSharedInstance(nullptr); g_shared_instance_->LoadTestResources(path, path); g_shared_instance_->InitDefaultFontList(); @@ -288,18 +288,18 @@ // static void ResourceBundle::CleanupSharedInstance() { delete g_shared_instance_; - g_shared_instance_ = NULL; + g_shared_instance_ = nullptr; } // static bool ResourceBundle::HasSharedInstance() { - return g_shared_instance_ != NULL; + return g_shared_instance_ != nullptr; } // static ResourceBundle& ResourceBundle::GetSharedInstance() { // Must call InitSharedInstance before this function. - CHECK(g_shared_instance_ != NULL); + CHECK(g_shared_instance_ != nullptr); return *g_shared_instance_; } @@ -579,24 +579,25 @@ base::RefCountedMemory* ResourceBundle::LoadDataResourceBytesForScale( int resource_id, ScaleFactor scale_factor) const { - base::RefCountedMemory* bytes = nullptr; - if (delegate_) - bytes = delegate_->LoadDataResourceBytes(resource_id, scale_factor); - - if (!bytes) { - base::StringPiece data = - GetRawDataResourceForScale(resource_id, scale_factor); - if (!data.empty()) { - if (HasGzipHeader(data) || HasBrotliHeader(data)) { - base::RefCountedString* bytes_string = new base::RefCountedString(); - DecompressIfNeeded(data, &(bytes_string->data())); - bytes = bytes_string; - } else { - bytes = new base::RefCountedStaticMemory(data.data(), data.length()); - } - } + if (delegate_) { + base::RefCountedMemory* bytes = + delegate_->LoadDataResourceBytes(resource_id, scale_factor); + if (bytes) + return bytes; } - return bytes; + + base::StringPiece data = + GetRawDataResourceForScale(resource_id, scale_factor); + if (data.empty()) + return nullptr; + + if (HasGzipHeader(data) || HasBrotliHeader(data)) { + base::RefCountedString* bytes_string = new base::RefCountedString(); + DecompressIfNeeded(data, &(bytes_string->data())); + return bytes_string; + } + + return new base::RefCountedStaticMemory(data.data(), data.length()); } base::StringPiece ResourceBundle::GetRawDataResource(int resource_id) const { @@ -608,8 +609,9 @@ ScaleFactor scale_factor) const { base::StringPiece data; if (delegate_ && - delegate_->GetRawDataResource(resource_id, scale_factor, &data)) + delegate_->GetRawDataResource(resource_id, scale_factor, &data)) { return data; + } if (scale_factor != ui::SCALE_FACTOR_100P) { for (size_t i = 0; i < data_packs_.size(); i++) { @@ -626,8 +628,9 @@ data_packs_[i]->GetScaleFactor() == ui::SCALE_FACTOR_300P || data_packs_[i]->GetScaleFactor() == ui::SCALE_FACTOR_NONE) && data_packs_[i]->GetStringPiece(static_cast<uint16_t>(resource_id), - &data)) + &data)) { return data; + } } return base::StringPiece(); @@ -854,7 +857,7 @@ // static void ResourceBundle::InitSharedInstance(Delegate* delegate) { - DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice"; + DCHECK(g_shared_instance_ == nullptr) << "ResourceBundle initialized twice"; g_shared_instance_ = new ResourceBundle(delegate); std::vector<ScaleFactor> supported_scale_factors; #if defined(OS_IOS)
diff --git a/ui/base/resource/resource_bundle.h b/ui/base/resource/resource_bundle.h index fc3fab98..102bb47 100644 --- a/ui/base/resource/resource_bundle.h +++ b/ui/base/resource/resource_bundle.h
@@ -99,7 +99,7 @@ // default resource. virtual gfx::Image GetNativeImageNamed(int resource_id) = 0; - // Return a ref counted memory resource or NULL to attempt retrieval of the + // Return a ref counted memory resource or null to attempt retrieval of the // default resource. virtual base::RefCountedMemory* LoadDataResourceBytes( int resource_id, @@ -219,7 +219,7 @@ // loading code of ResourceBundle. gfx::Image& GetNativeImageNamed(int resource_id); - // Loads the raw bytes of a scale independent data resource. + // Loads the raw bytes of a scale independent data resource or null. base::RefCountedMemory* LoadDataResourceBytes(int resource_id) const; // Whether the |resource_id| is gzipped in this bundle. False is also returned @@ -233,7 +233,7 @@ // Loads the raw bytes of a data resource nearest the scale factor // |scale_factor| into |bytes|. If the resource is compressed, decompress // before returning. Use ResourceHandle::SCALE_FACTOR_NONE for scale - // independent image resources (such as wallpaper). Returns nullptr if we fail + // independent image resources (such as wallpaper). Returns null if we fail // to read the resource. base::RefCountedMemory* LoadDataResourceBytesForScale( int resource_id, @@ -461,7 +461,7 @@ base::string16 GetLocalizedStringImpl(int resource_id); // This pointer is guaranteed to outlive the ResourceBundle instance and may - // be NULL. + // be null. Delegate* delegate_; // Protects |locale_resources_data_|.
diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc index 04543b3f..e971fdfc 100644 --- a/ui/views/controls/label_unittest.cc +++ b/ui/views/controls/label_unittest.cc
@@ -260,14 +260,14 @@ DISALLOW_COPY_AND_ASSIGN(LabelSelectionTest); }; -// Crashes on Linux only. http://crbug.com/612406 +TEST_F(LabelTest, FontPropertySymbol) { #if defined(OS_LINUX) -#define MAYBE_FontPropertySymbol DISABLED_FontPropertySymbol + // On linux, the fonts are mocked with a custom FontConfig. The "Courier New" + // family name is mapped to Cousine-Regular.ttf (see: $build/test_fonts/*). + std::string font_name("Courier New"); #else -#define MAYBE_FontPropertySymbol FontPropertySymbol -#endif -TEST_F(LabelTest, MAYBE_FontPropertySymbol) { std::string font_name("symbol"); +#endif gfx::Font font(font_name, 26); label()->SetFontList(gfx::FontList(font)); gfx::Font font_used = label()->font_list().GetPrimaryFont();
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java index 798b5d7d..542a42be 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java
@@ -42,6 +42,7 @@ public static void addObserver(Observer observer) { sLifecycleObservers.addObserver(observer); + if (sNumAttachedBrowserFragments > 0) observer.onFirstBrowserFragmentAttached(); } public static void removeObserver(Observer observer) { @@ -55,7 +56,7 @@ profileManager.getProfile(fragmentArgs.getString(BrowserFragmentArgs.PROFILE_NAME)); } - private void incrementBrowserFramentsAndNotifyObservers() { + private void incrementBrowserFragmentsAndNotifyObservers() { assert sNumAttachedBrowserFragments >= 0; sNumAttachedBrowserFragments++; if (sNumAttachedBrowserFragments != 1) return; @@ -80,7 +81,7 @@ mContext = ClassLoaderContextWrapperFactory.get(context); if (mBrowser != null) { // On first creation, onAttach is called before onCreate mBrowser.onFragmentAttached(mContext, new FragmentWindowAndroid(mContext, this)); - incrementBrowserFramentsAndNotifyObservers(); + incrementBrowserFragmentsAndNotifyObservers(); } } @@ -91,7 +92,7 @@ mBrowser = new BrowserImpl(mProfile, savedInstanceState); if (mContext != null) { mBrowser.onFragmentAttached(mContext, new FragmentWindowAndroid(mContext, this)); - incrementBrowserFramentsAndNotifyObservers(); + incrementBrowserFragmentsAndNotifyObservers(); } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerFactoryImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerFactoryImpl.java index dbf80a6..4289b9d0 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerFactoryImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerFactoryImpl.java
@@ -18,8 +18,8 @@ */ @UsedByReflection("WebLayer") public final class WebLayerFactoryImpl extends IWebLayerFactory.Stub { - private final int mClientMajorVersion; - private final String mClientVersion; + private static int sClientMajorVersion; + private static String sClientVersion; /** * This function is called by the client using reflection. @@ -37,8 +37,8 @@ } private WebLayerFactoryImpl(String clientVersion, int clientMajorVersion) { - mClientMajorVersion = clientMajorVersion; - mClientVersion = clientVersion; + sClientMajorVersion = clientMajorVersion; + sClientVersion = clientVersion; } /** @@ -48,7 +48,7 @@ @Override public boolean isClientSupported() { StrictModeWorkaround.apply(); - return Math.abs(mClientMajorVersion - getImplementationMajorVersion()) <= 3; + return Math.abs(sClientMajorVersion - getImplementationMajorVersion()) <= 3; } /** @@ -60,6 +60,14 @@ return VersionConstants.PRODUCT_MAJOR_VERSION; } + static int getClientMajorVersion() { + if (sClientMajorVersion == 0) { + throw new IllegalStateException( + "This should only be called once WebLayer is initialized"); + } + return sClientMajorVersion; + } + /** * Returns the full version string of the implementation. */
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java index 7b330ec..3baefd3 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
@@ -111,6 +111,7 @@ @Override public void onSuccess() { CrashReporterControllerImpl.getInstance().notifyNativeInitialized(); + configureNetworkChangeNotifier(); loadedCallback.onReceiveValue(true); } @Override @@ -134,6 +135,15 @@ .startBrowserProcessesSync( /* singleProcess*/ false); CrashReporterControllerImpl.getInstance().notifyNativeInitialized(); + configureNetworkChangeNotifier(); + } + + // Configure NetworkChangeNotifier to auto detect changes in network + // connectivity. + private void configureNetworkChangeNotifier() { + NetworkChangeNotifier.init(); + NetworkChangeNotifier.setAutoDetectConnectivityState( + new WebLayerNetworkChangeNotifierRegistrationPolicy()); } private void init(IObjectWrapper appContextWrapper, IObjectWrapper remoteContextWrapper) { @@ -197,12 +207,6 @@ LibraryLoader.getInstance().ensureInitialized(); } GmsBridge.getInstance().setSafeBrowsingHandler(); - - // Configure NetworkChangeNotifier to auto detect changes in network - // connectivity. - NetworkChangeNotifier.init(); - NetworkChangeNotifier.setAutoDetectConnectivityState( - new WebLayerNetworkChangeNotifierRegistrationPolicy()); } @Override
diff --git a/weblayer/public/java/org/chromium/weblayer/WebLayer.java b/weblayer/public/java/org/chromium/weblayer/WebLayer.java index 75aefad..5733dc8 100644 --- a/weblayer/public/java/org/chromium/weblayer/WebLayer.java +++ b/weblayer/public/java/org/chromium/weblayer/WebLayer.java
@@ -141,6 +141,16 @@ return getWebLayerLoader(context).getMajorVersion(); } + // Internal version of getSupportedMajorVersion(). This should only be used when you know + // WebLayer has been initialized. Generally that means calling this from any non-static method. + static int getSupportedMajorVersionInternal() { + if (sLoader == null) { + throw new IllegalStateException( + "This should only be called once WebLayer is initialized"); + } + return sLoader.getMajorVersion(); + } + /** * Returns the Chrome version of the WebLayer implementation. This will return a full version * string such as "79.0.3945.0", while {@link getSupportedMajorVersion} will only return the